静态成员和实例成员
静态成员:构造函数的属性、方法
实例成员:实例的属性、方法
(静态成员只有构造函数可以访问,实例成员只有构造函数的实例可以访问)
原型对象
创建:创建函数的时候同时就会产生它的原型对象;
特性:
1.原型对象和构造函数是同时产生的,创建函数的时候就会产生一个相关联的原型对象;
2.原型对象上的属性和方法,实例是可以调用的;
3.原型对象上的方法中的this,指向调用方法的对象;
作用:为实例保存公用的方法、属性
原型对象、构造函数、实例的关系
构造函数访问原型对象:构造函数名.prototype;
构造函数创建实例: new 构造函数名();
实例访问原型对象:实例.__proto__;
原型对象访问构造函数:原型对象.constructor;
原型链
概念:以原型对象为顺序形成的链状结构;
作用:
实例调用成员时的规则:
1.先查找自身的方法;
2.自身没有,去原型对象上查找;
3.原型对象上没找到,去原型对象的原型对象上查找;
注意: 原型对象的方法中的this,指向调用该方法的对象;
call()
方法
作用:函数调用的时候,修改函数中的this指向;call方法会直接调用函数
语法:函数名.call(目标对象,参数2,...)
;
功能:1.调用函数;
2.把函数中的this替换成目标对象;
注意:函数本身不会受影响,当不使用call的时候,函数中的this还是原来的指向
apply()
方法
作用:和call相同,只是传参时以数组的形式传入;
bind()
方法
语法:函数名.bind(目标对象,参数1,...)
规则:1.转化函数,将this指向目标对象,参数一次替换;
2.返回一个更改了this指向的新函数;
注意: 参数被指定后,后续调用传入的实参也不会改变参数的值;参数没有被指定,后续调用传入的实参会依次改变参数的值;
注意:
再这个例子中,fun调用时传入的实参是给b和c的,因为在定义fun函数的时候,已经将1传给了a;
function fn(a, b, c) {
console.log(this);
console.log(a + b + c);
}
var fun = fn.bind(this, 1);
fun(2, 3);