2015-05-16 60 views
0

我想創建對象後添加新的函數。我嘗試寫一些代碼,但它不正確。 // 對不起,我的描述不清楚。我想要創建一個對象後,我可以爲此對象添加功能來執行某些操作。希望有人能理解我的英語:(將自定義函數添加到對象

http://fiddle.jshell.net/7LnLerdt/

function Add(a,b){ 
 
    var _self = this; 
 
    var a = a; 
 
    var b = b; 
 
} 
 

 
Add.prototype.doAdd = function(){ 
 
     var rs = this.a+this.b; 
 
     
 
     if(rs < 10){ 
 
      this.lessThanTen(); 
 
     }else{ 
 
      this.moreThanTen(); 
 
     } 
 
    }; 
 

 
Add.prototype.moreThanTen = function(callback) { 
 
\t if(callback){ 
 
\t \t callback.call(this); 
 
\t } 
 
}; 
 

 
Add.prototype.lessThanTen = function(callback) { 
 
\t if(callback){ 
 
\t \t callback.call(this); 
 
\t } 
 
}; 
 

 
var add = new Add(); 
 

 
add.moreThanTen(function(){ 
 
    console.log("moreThanTen"); 
 
}); 
 

 
add.lessThanTen(function(){ 
 
    console.log("lessThanTen") 
 
}); 
 

 
add.doAdd();

+0

你想在代碼中做什麼? – shruti1810

+0

「但它不正確」不是一個問題的好描述。請包括問題中的代碼,並編輯問題以解釋什麼不起作用以及爲什麼,即您預期會發生什麼。 –

+0

我編輯了代碼,使它在它所屬的文章中。 – epascarello

回答

0

你在哪裏「分配」回調不是它是如何工作的代碼。它只是執行的方法,它不魔術般地分配回調,回調需要傳遞到doAdd方法,或者你需要以不同的方式分配回調

0

如果你想添加pr operties反對使用這個代碼,而不是:

function Add(a,b){ 
    this.a = a; 
    this.b = b; 
} 

如果你想添加回調使用:

Add.prototype.addCallbacks(less, more) { 
    this.less = less; 
    this.more = more; 
}; 

Add.prototype.moreThanTen = function(callback) { 
    if(this.more){ 
     this.more.call(this); 
    } 
}; 

Add.prototype.lessThanTen = function(callback) { 
    if(this.less){ 
     this.less.call(this); 
    } 
}; 

然後

var add = new Add(); 

add.addCallbacks(function(){ 
    console.log("lessThanTen") 
}, function(){ 
    console.log("moreThanTen"); 
}); 
0

你有一對夫婦的問題。首先,使用var將聲明一個本地變量,所以它不能在該函數之外訪問。如果要創建成員變量,請改用this.(如jcubic指出的)。

function Add(a, b) { 
    this.a = a; 
    this.b = b; 
} 

其次,您沒有正確添加回調。您的代碼正在立即執行回調,但是(我認爲)您真正想要做的是保存回調並稍後執行。

function Add(a, b) { 
    this.a = a; 
    this.b = b; 
    this.moreThanTenCallbacks = []; 
    this.lessThanTenCallbacks = []; 
} 

Add.prototype.moreThanTen = function(callback) { 
    moreThanTenCallbacks.push(callback); 
}; 

Add.prototype.lessThanTen = function(callback) { 
    lessThanTenCallbacks.push(callback); 
}; 

Add.prototype.executeCallback = function(callbacks) { 
    for (var i = 0; i < callbacks.length; ++i) { 
     if (callback) { 
      callback(); 
     } 
    } 
}; 

Add.prototype.doAdd = function() { 
    var rs = this.a + this.b; 
    if (rs < 10) { 
     this.executeCallback(this.lessThanTenCallbacks); 
    } else { 
     // NOTE: this will execute moreThanTen callbacks even if the result equals 10! 
     // Are you sure that is what you want? 
     this.executeCallback(this.moreThanTenCallbacks); 
    } 
}; 
相關問題