2012-05-28 158 views
-1

在我的網頁<head>,我這樣做:爲什麼這個變量沒有被初始化?

<script type="text/javascript" src="js/foo.js"></script> 
<script type="text/javascript"> 
    console.log(foo.bar); 
</script> 

foo.js代碼:

var foo = function() 
{ 
    this.bar = function() 
    { 
     console.log('here'); 
    } 
} 

後來在HTML文檔中:

<a href="#" onclick="foo.bar();">Test</a> 

但是如果我點擊鏈接上面,它表示函數沒有定義,即使foo.js已包含在內。此外,如果我做console.log(foo)它只顯示'功能()'和console.log(foo.bar)顯示未定義。爲什麼是這個,爲什麼我不能訪問這個函數?

+1

我不會進入編輯大戰,但是網絡開發標籤太寬泛,沒有任何形式的真正用處。這個問題甚至沒有針對Web開發,它純粹是JavaScript。另外,這與jQuery無關。 – JJJ

+1

@Juhana:確實;-) – zerkms

+1

它也不是jQuery! – ErJab

回答

4

我不知道,如果你想這樣說,但讓你console.log(foo.bar);工作,你可以這樣做:

var foo = { 
    bar: function() { 
     console.log('here'); 
    } 
}; 
7

因爲您還沒有創建對象。這是運行你的代碼的正確方式:

var foo = function() 
{ 
    this.bar = function() 
    { 
     console.log('here'); 
    } 
} 

var instance = new foo(); 
instance.bar(); 

http://jsfiddle.net/zerkms/wDaEn/

或者,你可以用另一種方式定義它:

var foo = { 
    bar: function() { 
     console.log('here'); 
    } 
}; 

foo.bar();​ 

http://jsfiddle.net/zerkms/wDaEn/1/

4

由於您使用this和創建實例類成員,您需要實例類第一:

var fooClass = new foo; 
console.log(fooClass.bar()); 
+0

如果我不想這樣初始化它,我需要做什麼? –

+0

@ClickUpvote:不要在你的對象中使用'this'關鍵字,例如'bar:function(){console.log('here'); }' – Sarfraz

+0

然後我怎麼能夠在超鏈接的onclick中調用'foo'對象的'bar'函數?現在我正在做'' –

-1

以上的答案是不正確的,記住JavaScript有沒有概念類或所述類別的實例。我會做一些關於Javascript範圍和關閉的閱讀。

當您將對象分配給變量名稱欄時,您將它分配給本地範圍。然後您嘗試從全局上下文訪問您的本地函數。這是錯誤的。

我敢打賭你正試圖沿着下面的內容: -

var foo = { 
     bar: function() { 

     } 
} 

等...

2

最少的代碼更改使用以下命令:

<script type="text/javascript"> 
    var foo = function() 
    { 
     this.bar = function() 
     { 
      console.log('here'); 
     }; 
     return this; // magic yes ? 
    }; 


foo().bar(); 
</script> 
相關問題