有人可以解释我这个JavaScript行为吗?我创建了2个对象(x
,y
),并且我拨打x.m()
修改了x
上的私有变量b
。然后,我在x
和y
上调用打印方法,并生成以下输出。如果打印方法p()
定义为this
属性(1)或作为原型(2),则输出会有所不同。Javascript类封装行为
this.p
定义作为预期:2级的对象有两个私有变量,对x
修改b
属性不影响y
的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();
生产:
// 1)
bbbb
ccc
// 2)
//ccc
//ccc
不要设置原型方法A'的'构造。这样,每次创建“A”实例时,都会覆盖原型方法'm'和'p'。 –