微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript和函数原型赋值

我总是假设函数的原型在所有对象之间共享,在某种意义上通过引用.因此,如果更改原型属性的值,则共享该原型的所有对象的值也会更改.因此,例如下面似乎不是在所有对象之间共享属性栏,而是复制它.这是正确的吗?构造函数原型的属性是在创建时简单地复制到所有类对象,还是由链接共享?
function foo()
{
     this.bar = 1;
}
function derived() { }
derived.prototype = new foo()

object1 = new derived()
object2 = new derived()

object1.bar = 2;
//but notice if I had said here derived.prototype.bar = 3,object1.bar would still equal 2 but object2.bar would equal 3
alert(object2.bar) // this prints 1;

解决方法

当您指定object1.bar = 2时,您正在object1上创建一个自己的属性,此属性仅存在于该对象实例中,并且与其原型无关.

object1上的此属性将遮蔽derived.prototype上存在的值,这意味着当您查找object1.bar时,它将找到直接存在于该对象上的值.

另一方面,如果你查找object2.bar,这个对象没有自己的bar属性,所以属性查找将搜索这个继承自(derived.prototype)的对象,它将找到值1.

您的对象结构如下所示:

 object1
 --------
| bar: 2 | -----------------
 --------                   |         derived.prototype
                            |        ----------
                            |------> | bar: 1  | --    foo.prototype
 object2 (no own properties)|        ----------   |   ------------------
 --------                   |                     -> | constructor: foo |
|        | -----------------                          ------------------
 --------                                                    |
                                                             v
                                                     ------------------
                                                    | Object.prototype |
                                                     ------------------
                                                             |
                                                             v
                                                            null

哪里—> lines表示表示继承的内部[[Prototype]]链接.

原文地址:https://www.jb51.cc/js/154858.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐