2011-03-06 39 views
2

這裏是一個小小的Javascript代碼片段,我使用了一個函數來模擬一個對象。我試圖反思成員函數(這是函數的真正嵌套函數),但代碼不起作用。反映在一個Javascript函數內

有人可以幫我理解爲什麼代碼不起作用。我想了解導致此代碼無法工作的Javascript的基本原則。

謝謝。

var test = function() { 

    var first = function first() { 
     alert ("first"); 
    } 

    var second = function second() { 
     alert ("second"); 
    } 

}; 

function getOwnFunctions(obj) { 
    for(var f in obj) { 
     if(typeof(f) == "function" && obj.hasOwnProperty(f)) { 
      alert(f); 
     } 
    } 
} 

getOwnFunctions(test); 

回答

1

一對夫婦在這裏點:

  1. var定義變量,這是說, first & second功能 只有test 函數內部可用的範圍。要模擬object, ,您需要使用this關鍵字。
  2. for(var f in obj):在for循環 過對象,並返回 obj,所以typeof(f)總是返回,這將是一個 stringf變量的類型,你要檢查 typeof(obj[f]])這將返回 屬性的實際底層 的類型。
  3. 要撥打getOwnFunctionstest,而不是實際的 功能test一個實例:

var test = function() {  
    this.first = function() { 
     alert ("first"); 
    }  
    this.second = function() { 
     alert ("second"); 
    }  
};  
function getOwnFunctions(obj) { 
    for(var f in obj) { 
     if(typeof(obj[f]) == "function" && obj.hasOwnProperty(f)) { 
      alert(f); 
     } 
    } 
} 

getOwnFunctions(new test); 
+0

@「The Scrum Master」使用「新測試」對我無效。 – Parag 2011-03-06 05:06:02

+0

@parag在螢火蟲中爲我工作,你使用什麼瀏覽器?嘗試'new test()' – 2011-03-06 05:07:51

+0

@「The Scrum Master」我在Chrome上使用此代碼片段(Linux上的5.0.375.99測試版)和Firefox 3.5.9上嘗試它http://jsfiddle.net/adaptives/QZWgV/ – Parag 2011-03-06 06:15:45

1

var關鍵字引入一個符號,是本地的函數調用,而不是this所指的上下文範圍的動態範圍。

+0

我試圖從嵌套函數中刪除'var'關鍵字,但也沒有成功。 – Parag 2011-03-06 05:07:32

+0

取而代之的是,使用'this.foo =「bar」'定義上下文對象的屬性。 – Pointy 2011-03-06 14:02:51

1

所以,如果你想有一個功能,有「方法」,你會認爲功能類似於對象:

var test = function() {}; 

test.first = function first() { 
    alert ("first"); 
} 

test.second = function second() { 
    alert ("second"); 
} 

function getOwnFunctions(obj) { 
    for(var f in obj) { 
    if(typeof(f) == "function" && obj.hasOwnProperty(f)) { 
     alert(f); 
    } 
    } 
} 

getOwnFunctions(test); 

這裏的偉大的事情是你可以做的事情如下所示:

function x(y){ 
    alert(y); 
} 

x.test = function(){this('test');} 

x.test(); 

通知測試

相關問題