一、基础知识分析
1、类与对象的定义
类:一群有相同属性与行为集合体(人类:群体概念)
对象:从类中拿出的具有确定属性值和方法的个体称为对象(个体概念)
2、类和对象的关系
类是抽象的,对象是具体的。(类是对象的抽象化,对象是类的具体化)
通俗来说,类是一个抽象的概念,表示具有相同属性和行为的集合,但是类仅仅表明这类群体具有相同的属性,没有具体的属性值。
而对象是对类的属性进行具体赋值后,而得到的一个具体的个体;
3、使用类和对象的步骤
①创建一个构造函数(一个类)类名必须要每个单词的首字母大写
function 类名(){}
this.属性=属性1;
this.方法=function(){}
this指向谁?指向即将调用当前构造函数的对象。
②通过类实例化出一个新的对象
var obj = new 类名(属性-Value)
原构造函数指向新的object对象;
obj.方法();调用方法
obj.属性();调用属性
4、两个重要的属性:
constructor:返回当前对象的构造函数。(只有对象才有,返回的属于类)
zhangsan.constructor==Person
>>>对象的constructor,位于_protocol_原型对象上
instanceof判断一个对象是不是某个类的实例
zhangsan instanceof Person
5、广义对象与狭义对象
狭义对象:只有属性方法,除此之外没有任何东西
var obj = {}; var obj = new Object();
广义对象:除了用字面量声明的基本数据类型之外,万物皆对象。即能够添加属性方法的变量,就是对象
var s = "1",不是对象
var s = new String("1"); 就是对象
二、this详解
1、谁最终调用函数,this指向谁。
① this指向的,永远只可能是对象!!!!!!
② this指向谁,永远不取决于this写在哪!!而是取决于函数在哪调用。
③ this指向的对象,我们称之为函数的上下文context,也叫函数的调用者
2、※※※※※this指向的规律(与函数调用的方式息息相关):
this指向的情况,取决于函数调用的方式有哪些:
① 通过函数名()直接调用:this指向window
② 通过对象.函数名()调用的:this指向这个对象
③ 函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
④ 函数作为window内置函数的回调函数调用:this指向window
setInterval setTimeout 等...
⑤ 函数作为构造函数,用new关键字调用时:this指向新new出的对象
三、原型与原型链_proto_与prototype
1、prototype:函数才有prototype。是一个对象指向了当前构造函数的引用地址
2、_proto_:所有对象都有proto属性,当用构造函数实例化一个对象时,会将新对象的proto属性指向构造函数的prototype
zhangsan._proto_==Person.prototype √
所有对象最终都会指向object的prototype
【原型链】
1、通过构造函数new出的新对象的proto指向构造函数的prototype
2、所有函数的protot指向function该内置函数的prototype
3、非构造函数new出的对象(包括大括号直接声明 new Object() 对象的prototype)的proto指向object的prototype
4、object的proto指向null