[英]javascript function this and prototype
代码如下:
function A() { this.name = "kl"; this.obj2 = { a: 1 }; } A.prototype.city = "china"; A.prototype.obj = {age: 30}; var a = new A(); var b = new A(); a.name = "kobe"; a.obj.age = 20; a.city = "American" a.obj2.a = 30; console.log(b.name); // k1 console.log(b.city); // why china ? console.log(b.obj); // when b.city = china, why b.obj = {age: 20} console.log(b.obj2); // {a: 1}
我的意见是a和b都有它自己的this,因此如何编辑this [property]不能更改b自己的this.value;
财产申报如此分享财产? 是对的 ? 但是当obj更改时,将影响b.obj,而当城市更改时,将不会影响b.city?
让我们逐行浏览以下内容:
A.prototype
指向一个对象。 var a = new A();
name
和obj2
值分别为kl
和{ a: 1 }
function A
的末尾,函数实际运行return this;
,字面返回创建要被分配给对象a
。 var b = new A();
与上述相同 a.name = "kobe";
,您正在将值从kl
修改为kobe
a.city = "American";
,你要创建一个新的属性city
在a
本身 a.obj2.a = 30;
,您也只在修改一个值。 a.obj.age = 20;
,有些不同
a
本身没有属性obj
,因此它在原型链上指向对象A.prototype
指向,并找到属性obj
,因此这行代码实际上是在修改该obj
并更改obj.age
的值obj.age
从30到20。 b.name
,由于b
具有值为kl
属性name
,因此它将输出kl
b
本身没有属性city
,因此它沿着原型链向上到达对象A.prototype
指向的对象,并查看它是否可以找到对象,就像您之前运行A.prototype.city = "china";
,所以它打印china
。 console.log(b.obj);
运行时, b
转到原型链,并在对象A.prototype
指向的对象上找到obj
,因此它打印{age: 20}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.