Javascript 将访问相同的原型变量';x';通过此.x创建单独的副本?
我试图理解通过Javascript 将访问相同的原型变量';x';通过此.x创建单独的副本?,javascript,html,prototype,this,Javascript,Html,Prototype,This,我试图理解通过prototype访问变量与通过this访问变量之间的区别。在一个对象中,它似乎创建了一个单独的x副本,一个用于this.x,另一个用于*.prototype.x。但在另一种情况下,看起来两者指向同一副本 测试承诺 点击我 函数估计(){ } Estimate.prototype.sharedVar=888; Estimate.prototype.print=函数(){ console.log(“*****************************************
prototype
访问变量与通过this
访问变量之间的区别。在一个对象中,它似乎创建了一个单独的x
副本,一个用于this.x
,另一个用于*.prototype.x
。但在另一种情况下,看起来两者指向同一副本
测试承诺
点击我
函数估计(){
}
Estimate.prototype.sharedVar=888;
Estimate.prototype.print=函数(){
console.log(“*************************************************************************”);
console.log(“*共享变量:”,this.sharedVar);
log(“*Estimate共享变量:”,Estimate.prototype.sharedVar);
console.log(“*************************************************************************”);
}
Estimate.prototype.update=函数(值){
this.sharedVar=值+100;
Estimate.prototype.sharedVar=值+300;
}
功能测试(){
var o1=新估计();
var o2=新估计();
o1.print();
o2.print();
o1.更新(555);
o1.print();
o2.print();
}
实际上X.prototype.Y
在您希望向X
的每个实例添加相同属性(此处为Y
)时非常有用。如果您希望这些元素之间共享一个值,那么您可以轻松地向X
本身添加一个属性,或者您可以创建一个全局变量,每个事物都可以访问该值
但如果您想将其完全隐藏在X
objects范围之外,则可以尝试以下方法:
varx=(函数X(){
_X.共享值=3;
var myFunc=函数(){
_X.SharedValue++;
};
myFunc.prototype.getShared=()=>\u X.SharedValue;
返回myFunc;
}());
log(new X().getShared(),new X().getShared(),new X().getShared())代码>添加prototype属性时,它会影响具有该prototype的所有对象。使用关键字this时,它仅影响该实例
下面函数中的两个语句不相等。他们正在改变两个独立的变量。当您第一次初始化对象时,它们没有属性,因此解释器将搜索以查看原型是否具有该属性。当您调用update时,它向实例添加了一个新属性。当您第一次搜索this.sharedVar时,该实例没有它,因此它将搜索原型以查找共享var,如果没有找到它,它将继续转到对象的sharedVar
在之前和之后的图像中,您可以看到发生了什么