原型

任何对象(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()
 
 
posted @ 2021-01-18 19:05  技术活当赏  阅读(129)  评论(0)    收藏  举报