💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
创建一个对象 ~~~ function Person() { } var person=new Person(); person.name='zhnaglei' console.log(person.name) ~~~ 每个函数都要一个prototype ~~~ function Person() { } Person.prototype.name='zhanglei' var person1=new Person(); var person2=new Person(); console.log(person1.name) console.log(person2.name) ~~~ 函数的 prototype 属性指向了一个对象,这个对象正是调用该构造函数而创建的实例的原型,也就是这个例子中的 person1 和 person2 的原型。 每一个JavaScript对象在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个原型都会从原型继承属性 ~~~ function Person() { } var person = new Person(); console.log(person.__proto__ === Person.prototype); ~~~ 每一个原型都有一个construct属性指向关联的够着函数 ~~~ function Person() { } console.log(Person===Person.prototype.constructor) ~~~ 实例和原型的关系 ~~~ function Person() { } Person.prototype.name='kevin' var person=new Person(); person.name='zhanglei' console.info(person.name) delete person.name console.info(person.name) ~~~ 当读取实例属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还是查不到就去找原型的原型,一直找到顶层为止。 继承意味着复制操作,然而JavaScript默认并不会复制对象的属性,相反, JavaScript只是在两个对象之间创建一个关联,这样,一个对象就可以通过委托访问另一个属性和函数,所以与其叫继承,委托的说法反而更准确些。