有人能解释一下这个javascript行为吗?我创建了2个对象(x
,y
),并调用x.m()
来修改b
上的私有变量x
。然后我在x
和y
上调用打印方法,它会产生以下输出。如果将打印方法p()
定义为this
属性(1)或原型(2),则输出会有所不同。
this.p
定义按预期运行:2个对象有两个私有变量,在b
上修改x
属性不会影响y
' s {{1}属性。但是使用b
定义,A.prototype.p
属性似乎是对象b
和x
共有的静态变量。
代码中描述的行为:
y
产生
function A() {
var b = "bbb";
function f() {
b = "ccc";
}
// 1)
this.p = function() {
console.log(b);
};
// 2)
//A.prototype.p = function() {
// console.log(b);
//};
A.prototype.m = function() {
f();
};
}
var x = new A();
var y = new A();
x.m();
x.p();
y.p();
答案 0 :(得分:0)
在您的示例中,您将覆盖m
构造函数中的原型方法A
(以及A
),这意味着每次创建实例时,原型方法都将更改。然后,function A() {
this.b = "bbb";
}
A.prototype.p = function() {
console.log(this.b);
};
A.prototype.m = function() {
this.b = "ccc";
};
var x = new A(),
y = new A();
x.m();
x.p();
y.p();
的所有实例将使用相同的方法,即最后创建的实例之一。
看看这个示例,它应该显示您期望的代码行为:
{{1}}