当前位置:  开发笔记 > 编程语言 > 正文

为什么添加原型的不同方式会影响?

如何解决《为什么添加原型的不同方式会影响?》经验,为你挑选了1个好方法。

我是在运行以下代码,

function Person(){}
var person1 = new Person();
Person.prototype= {
    name : "Ann",
    sayName : function(){
        console.log( this.name);
    }
}
 person1.sayName();

它会显示错误"对象#没有方法'sayName'".这会导致错误,因为person1指向的原型不包含该名称的属性.我的问题是当我改变我定义原型的方式如下:

function Person(){}
var person1 = new Person();
Person.prototype.name = "Ann";
Person.prototype.sayName = function(){
    console.log(this.name);
}
person1.sayName();

它与"安"正确运行.谁能告诉我为什么会这样?谢谢.



1> deceze..:

当您使用实例化"类"时new Person,将为该新对象分配值Person.prototype,例如:

person1.__proto__ = Person.prototype

(不是真的,仅用于说明目的.)

这意味着双方person1.__proto__Person.prototype 指向同一个对象.

如果你这时候再和完全替代 Person.prototypePerson.prototype = { ... },那么实例的原型和类原型不会指向同一个对象了.

但是,如果使用修改现有原型Person.prototype.name = ...,则两者都继续指向相同(现在已修改)的对象.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有