进入Javascript原型,我不知道为什么当我从另一个原型函数调用一个原型函数并将值传递给另一个时,该值不会更新。
这是一个与封闭有关的问题吗?我试图使用全局变量,但仍然无法正常工作。 有什么帮助吗?
function test(elem){
this.opt =
this.elem = $(elem)
this.method1();
}
test.prototype.method1 = function() {
var output = 1;
this.method2(output);
console.log(output);
}
test.prototype.method2 = function(output) {
output += 1;
}
var data = new test(this);
当我在method1函数中调用method2时,输出将不会更新,因此它仍将控制台1。
答案 0 :(得分:2)
您的问题基本上是reference vs value
Javascript总是按值传递,但是当变量引用时 对象(包括数组),"值"是对象的引用。
更改变量的值永远不会更改基础 原始或对象,它只是将变量指向一个新的原语或 宾语。
但是,更改a引用的对象的属性 变量确实会改变底层对象。
你有3个职位:
function test(elem, opt){
this.opt = opt;
this.elem = $(elem);
this.method1();
}
test.prototype.method1 = function() {
var data = {
output: 1
};
this.method2(data);
console.log(data.output);
}
test.prototype.method2 = function(data) {
data.output += 1;
}
var inst = new test();

output
:http://jsfiddle.net/8c2p349g/1/ method2
醇>
function test(elem, opt){
this.opt = opt;
this.elem = $(elem);
this.method1();
}
test.prototype.method1 = function() {
var output = 1;
output = this.method2(output);
console.log(output);
}
test.prototype.method2 = function(output) {
return output + 1;
}
var inst = new test();

output
作为test
:[{3}}
function test(elem, opt){
this.opt = opt;
this.elem = $(elem);
this.method1();
}
test.prototype.method1 = function() {
this.output = 1;
this.method2(this.output);
console.log(this.output);
}
test.prototype.method2 = function(output) {
this.output += 1;
}
var inst = new test();

答案 1 :(得分:1)
在method2
中,output
是该函数范围的变量
它并未指向output
中的method1
。
您将不得不从method2
返回新值:
test.prototype.method1 = function() {
var output = 1;
output = this.method2(output);
console.log(output);
}
test.prototype.method2 = function(output) {
return output + 1;
}
答案 2 :(得分:0)
output
是method1
的局部变量,它不在method2
的范围内。