2013-10-15 68 views
0

http://jsfiddle.net/9nmfX/OO JS:對象

var a = { 
    init: function(){ 
     this.b.c(); 
    }, 
    b : { 
     constant: 'some constant', 
     c: function(){ 
      alert(this.constant); 
     } 
    } 
} 
a.init(); 

我一直在短期編寫JavaScript,而現在在這個值。突然想到我沒有使用this。爲每個呼叫寫出整個命名是非常煩人和耗時的。

在上面的代碼是執行this跨瀏覽器兼容或沒有人知道我是否使用這個不正確?

+0

閱讀[MDN約'this'文章](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this) – Bergi

回答

2

是的,那是跨瀏覽器/平臺。這是ECMAScript的一部分,所以它可以在Javascript的所有實現中使用。

請注意,this可能並不總是引用您想要的對象。試想一下:

var func = a.b.c; 
func(); 

其中要求由a.b.c引用的函數,但this將參照window對象或者是null代替a.b

又如:

setTimeout(a.init, 1000); // Throws an error and fails after 1 second 

但:

setTimeout(a.init.bind(a), 1000); // Works as expected and 
setTimeout(function(){ a.init(); }, 1000); // Works as expected 
+0

但我看不出爲什麼要聲明var func = abc是否只有短手引用abc()? (對於這種類型的OO,php看起來更加健壯) – John

+1

@John對,或者作爲你的一個例子:)當函數被傳遞爲像類似的'setTimeout'這樣的回調函數時,例。 – Paulpro

+0

啊..我明白了。感謝提示,非常感謝。真的開始進入JS ..去了幾次關於模塊化js的談話,期待未來幾年。 – John