2010-08-19 12 views
3

讓我們說我有這樣的代碼:的javascript「這個」使用

var object1 = {}; 
object1.class1 = function() { 
    this.property1 = null; 
    this.property2 = 'ab'; 
} 

在這種情況下,是什麼「這」代表什麼? object1或class1?每當我想在一個對象中定義一個類構造函數時,最好的方法是什麼?

+1

鏈接我覺得幫你:http://www.phpied.com/3-ways-to-define-a-javascript-class/ – 2010-08-19 08:39:06

+0

我想我剛剛學到了東西:object1不能有另一個實例。謝謝! – Khoi 2010-08-19 08:55:43

回答

2

對於class1,因爲您無法創建object1類型的對象。

然而,如果代碼是:

function object1() { 
    this.class1 = function() { 
     this.property1 = null; 
     this.property2 = 'ab'; 
    } 
} 

你可以有:

var obj = new object1(); 
obj.class1(); 
obj.property2; // => 'ab'; 

var cls = new obj.class1(); 
cls.property2; // => 'ab'; 

所以它可能取決於上下文。

+0

也就是說,我已經看到'this'引用object1的情況。看來如果這些屬性已經存在於object1中,那麼class1只會變成一個單純的方法。 感嘆,只要有一種方法我可以肯定。 – Khoi 2010-08-19 09:13:59

+1

@Khoi:號碼'this'指的是作爲'this'傳遞給方法的對象。如果你想,你可以使這個引用另一個完全不相關的對象,如:var test = {}; obj.class1.call(test);',那麼'test.property2'就是'ab'。 'this'僅依賴於javascript中的調用上下文,而不是其他任何內容。 – Mewp 2010-08-19 09:22:13

+0

是的,解決了這個問題。我只需要明確定義調用上下文。謝謝! – Khoi 2010-08-20 00:16:55

1

如果你調用它像這樣:

object1.class1(); 

然後this將參考object1