- prototype
- _proto_
- constructor 每个函数都有一个 prototype 属性,里面包含了 constructor 和 _proto_ 对象,而每个对象都有一个 _proto_ 指向他的构造函数的 prototype ,我们称 prototype 为显式原型,_proto_ 为隐式原型,prototype 为我们提供了给原型对象提供属性和方法的能力,我们可以通过 prototype 对原型对象添加方法,但是最好不要在已有的原生对象的方法进行修改,比如修改 array,object 内置方法,以免造成原型污染
function Person(name) {
this.name = name||’John’
}
var person = new Person()
console.log(person.name) // ‘John’
var person2 = new Person(‘Yang’)
console.log(person2.name)
当对象被以某个原型构建时,我们会先从我们对象本身上去查找,如果不存在,则在他的隐式原型上查找(构造函数的显式原型上查找),否则就在构造函数的 prototype 的 _proto_ 上查找,这样一直向上查找,知道找到为止,若找不到则返回 undefined,这样就会形成一个链式结构