将值传递给另一个原型函数

时间:2014-11-07 09:07:57

标签: javascript jquery

进入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。

3 个答案:

答案 0 :(得分:2)

您的问题基本上是reference vs value

  

Javascript总是按值传递,但是当变量引用时   对象(包括数组),"值"是对象的引用。

     

更改变量的值永远不会更改基础   原始或对象,它只是将变量指向一个新的原语或   宾语。

     

但是,更改a引用的对象的属性   变量确实会改变底层对象。

你有3个职位:

  1. 将变量包装在对象中:http://jsfiddle.net/8c2p349g/
  2. 
    
    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();
    
    
    

    1. outputhttp://jsfiddle.net/8c2p349g/1/
    2. 返回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();
      
      
      

      1. output作为test:[{3}}
      2. 的属性附加

        
        
        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)

outputmethod1的局部变量,它不在method2的范围内。