原型
任何对象(object)都天生具有一个属性,叫__proto__,这个属性的值是一个对象,这个对象就叫做对象的原型
对象天生就可以访问原型中的属性和方法
其实任何属性类型,在js底层都是对象
任何函数天生自带一个属性,叫prototype,的值是一个对象 - 原型
console.log(Number.prototype === a.__proto__); // true
构造函数的缺点:全局中的变量容易被覆盖
将方法放在原型上 - 由构造函数来操作
这就是最佳的解决方案:
使用构造函数来定义,属性就在构造函数中添加,方法就由构造函数操作原型添加,对象默认能访问到运行中的属性和方法
任何原型天生自带一个属性 constructor,值是一个函数 - 构造函数
function fn(){ } var f = new fn() console.log(f.__proto__); console.log( f.__proto__.constructor === fn );
任何对象天生自带__proto__,原型也是一个对象,既然是对象,就会有__proto__
对象有原型,原型是对象,原型有原型 ....
最顶端是null,这样形成的一条链式结构 - 原型链
原型链有什么用?
当一个对象访问一个属性或方法的时候,先在自己中找,自己有就访问到,自己没有,找原型要,原型有,访问到的是原型的属性和方法,原型也没有,找原型的原型要 ..... 如果找到null也没有,返回undefined
精准的检测数据类型: Object.prototype.toString.call()
将伪数组转为数组:Array.prototype.slice.call()

浙公网安备 33010602011771号