有人可以解釋我這個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'。 –