2010-11-29 84 views
0

我有點困惑。我想創建一個JavaScript對象,如:JavaScript對象問題

function myObject(){ 
this.keyOne=1; 
this.keyTwo=2; 
this.keyThree=3; 

function add(){ 
return this.keyOne+this.keyTwo+this.keyThree; 
} 

return{ 
    add: add 
} 

} 

所以用

var newObject = new myObject(); 

工作正常創建該對象和所有屬性都是正確的。但與

var result = newObject.add; 

所有的鍵都突然不確定!我不知道爲什麼? :/

回答

3

你不是在的裸的方式定義add(),例如,你可以這樣做:

function myObject(){ 
    this.keyOne=1; 
    this.keyTwo=2; 
    this.keyThree=3; 

    this.add = function(){ 
     return this.keyOne+this.keyTwo+this.keyThree; 
    } 
} 
var newObject = new myObject(); 
var result = newObject.add(); 

You can test it here

還要注意,因爲它是一個函數,所以需要用括號調用add(),否則您將得到函數本身,而不是結果。

+0

實現這樣我得到「表達式結果'myObject.add'[undefined]不是函數。」; – mkind 2010-11-29 10:51:18

+0

@mkind - 你有*完全*因爲我有它嗎?你可以從演示中看到這是如何工作的...你的版本可能與答案不同,請仔細檢查:) – 2010-11-29 10:55:36

3

目前在標準JavaScript中關鍵字public沒有任何意義。

基於原來的代碼片段,我懷疑你的意思是:然後

function myObject(){ 
    this.keyOne=1; 
    this.keyTwo=2; 
    this.keyThree=3; 

    function add(){ 
     return this.keyOne+this.keyTwo+this.keyThree; 
    } 

    return { 
     add: add 
    }; 
} 

該函數將返回一個對象,它只有一個屬性:add功能。該對象由關鍵字return後的對象字面值創建。

但是沒有用this。你可以寫:

function myObject() { 

    var keyOne=1; 
    var keyTwo=2; 
    var keyThree=3; 

    function add() { 
     return keyOne + keyTwo + keyThree; 
    } 

    return { 
     add: add 
    }; 
} 

甚至更​​簡潔地說:

function myObject() { 

    var keyOne=1; 
    var keyTwo=2; 
    var keyThree=3; 

    return { 
     add: function() { 
      return keyOne + keyTwo + keyThree; 
     } 
    }; 
} 

這有額外的好處,你不需要調用它與new前綴。這只是創建並返回包含另一個函數的對象的普通函數:

var o = myObject(); 
alert(o.add()); 

你可以允許被添加到指定的號碼來電,就像這樣:

function myObject(keyOne, keyTwo, keyThree) { 

    return { 
     add: function() { 
      return keyOne + keyTwo + keyThree; 
     } 
    }; 
} 

var o = myObject(5, 4, 7); 
alert(o.add());