Javascript 我试图使用原型函数修改构造函数中的变量,但得到了意外的结果
我以为我理解javascript中的构造函数和原型,直到我写了这段代码并得到了意想不到的结果Javascript 我试图使用原型函数修改构造函数中的变量,但得到了意外的结果,javascript,prototype,Javascript,Prototype,我以为我理解javascript中的构造函数和原型,直到我写了这段代码并得到了意想不到的结果 职能人员(){ 年龄=18岁; Person.prototype.getAge=函数(){ 回归年龄; }; Person.prototype.setAge=函数(值){ 年龄=价值; } this.getAge1=函数(){ 回归年龄; }; this.setAge1=函数(值){ 年龄=价值; } }; var marry=新人(); var jack=新的人(); console.log(mar
职能人员(){
年龄=18岁;
Person.prototype.getAge=函数(){
回归年龄;
};
Person.prototype.setAge=函数(值){
年龄=价值;
}
this.getAge1=函数(){
回归年龄;
};
this.setAge1=函数(值){
年龄=价值;
}
};
var marry=新人();
var jack=新的人();
console.log(mary.getAge())//产出18
console.log(jack.getAge())//产出18
log(mary.getAge1())//产出18
console.log(jack.getAge1())//产出18
玛丽=新人();
杰克=新人();
结婚。年龄(22岁);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出18
console.log(jack.getAge1())//产出22
玛丽=新人();
杰克=新人();
杰克·塞奇(22);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出18
console.log(jack.getAge1())//输出v 22
玛丽=新人();
杰克=新人();
第1组(22);
console.log(mary.getAge())//产出18
console.log(jack.getAge())//产出18
log(mary.getAge1())//产出22
console.log(jack.getAge1())//产出18
玛丽=新人();
杰克=新人();
jack.设置1(22);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出18
console.log(jack.getAge1())//输出22
只是一个函数,同一个变量Person.prototype.getAge
age
- 由于关闭
对于每个对象都是单独的。这样它就不会改变其他对象的私有属性,即this.getAge1
年龄
Person.prototype.getAge=funct…
时。它更新getAge()
。方法。对于两个对象。但是,当您为this.get/setAge1指定一个新值时,它不会更改其他对象的
getAge1()
。
只是一个函数,同一个变量Person.prototype.getAge
age
- 由于关闭
对于每个对象都是单独的。这样它就不会改变其他对象的私有属性,即this.getAge1
年龄
Person.prototype.getAge=funct…
时。它更新getAge()
。方法。对于两个对象。但是,当您指定
this.get/setAge1
一个新值时,它不会更改其他对象的getAge1()
。问题似乎更多的是闭包,而不是原型
因为原型方法对于所有对象都是通用的,并且您的原型方法设置正在更新闭包年龄
现在,每次创建对象时,它都会为其创建一个新的闭包,因此您的原型将引用上次创建的闭包
检查下面的示例,无论您为哪个对象设置值,它都将始终为最后一个对象更新
这就是为什么在大多数情况下在函数中使用原型不是一个好主意
有关更多信息,请参阅
职能人员(){
年龄=18岁;
Person.prototype.getAge=函数(){
回归年龄;
};
Person.prototype.setAge=函数(值){
年龄=价值;
}
this.getAge1=函数(){
回归年龄;
};
this.setAge1=函数(值){
年龄=价值;
}
};
玛丽=新人();
杰克=新人();
结婚。年龄(22岁);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出18
console.log(jack.getAge1())//产出22
console.log(“-------------------------------------------------------------”)
杰克=新人();
玛丽=新人();
结婚。年龄(22岁);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出22
console.log(jack.getAge1())//输出18
问题似乎更多的是闭包,而不是原型
因为原型方法对于所有对象都是通用的,并且您的原型方法设置正在更新闭包年龄
现在,每次创建对象时,它都会为其创建一个新的闭包,因此您的原型将引用上次创建的闭包
检查下面的示例,无论您为哪个对象设置值,它都将始终为最后一个对象更新
这就是为什么在大多数情况下在函数中使用原型不是一个好主意
有关更多信息,请参阅
职能人员(){
年龄=18岁;
Person.prototype.getAge=函数(){
回归年龄;
};
Person.prototype.setAge=函数(值){
年龄=价值;
}
this.getAge1=函数(){
回归年龄;
};
this.setAge1=函数(值){
年龄=价值;
}
};
玛丽=新人();
杰克=新人();
结婚。年龄(22岁);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出18
console.log(jack.getAge1())//产出22
console.log(“-------------------------------------------------------------”)
杰克=新人();
玛丽=新人();
结婚。年龄(22岁);
console.log(mary.getAge())//产出22
console.log(jack.getAge())//产出22
log(mary.getAge1())//产出22
console.log(jack.getAge1())//输出18