原型与原型链

95 阅读1分钟

理解原型

protorype就是原型

每一个函数、构造器(Array Function Boolean String Object Number) 都有一个原型prototype 这个键对应的值就是原型对象 每一个原型对象里面的方法都不一样 例如数组的方法和字符串的方法

function f(){}
console.log(f)

console.log(Array)

不管是函数还是构造器 他们的原型对象里一定包含constructor这个属性

console.log(f.prototype)
console.log(Array.prototype)

这个construcor指向的是这个函数本身

console.log(f === f.prototype.constructor)
console.log(Array === Array.prototype.constructor)

每一个对象都有一个__proto__属性

结论: 每一个函数和构造器都有一个prototype和__proto__ 因为函数和构造器也是对象 并且他们的原型对象中也有__proto__属性

对象中只有__proto__属性

__proto__指向创建这个对象的原型对象(prototype的值)

console.log(Object.prototype === obj.__proto__)  //true

画一个图深入理解他们之间的关系

ECMAScript5中提供了一个Object.getPrototypeof()的方法,用来获取当前对象的原型对象。

原型链

理解

如果想访问一个对象的属性或方法时,它先从自己定义的找对应的属性或方法,如果没有找到,它会从自己的__proto__属性(创建它的原型对象)中找,如果在这个__proto__属性中还没有找到,它会从__proto__的__proto__属性中找,依次下去就是原型链

例子

对于本地的构造器 不建议去添加属性和修改

这样不会报错