2016-04-23 74 views
2

以下代碼:使用關鍵字「this」有什麼好處?

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return cody.gender;} 
}; 

相同:

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return this.gender;} 
}; 

兩個代碼acheive相同的目標。唯一的區別是交換科迪與關鍵字。在Javascript中使用關鍵字這個有什麼好處?它會提升性能嗎?我們可以在OOP中忽略它嗎?

+0

在我看來'this'關鍵字是完整的化妝品。它是有道理的,並且可能會讓你的代碼更容易理解。 – Shawn31313

+0

這意味着屬性的「所有者」,所以this.gender和cody.gender除了它們是不同的詞外沒有什麼不同。 – Li357

+0

http://stackoverflow.com/questions/3889570/what-is-the-這與此之間的差異 – rmondesilva

回答

1

的「這個」關鍵字用於指當前執行上下文或對象的代碼是當你要定義一個類型的對象也叫做類例如人是有益的。

var Person = function(name, living, age, gender) { 
    this.name = name; 
    this.living = living; 
    this.age = age; 
    this.gender = gender; 
    this.getGender = function(){return this.gender}; 
}; 

var cody = new Person('Cody', true, 23, 'male'); 
var john = new Person('John', true, 25, 'male'); 

這允許您使用「新數k用他們自己的價值創造Person的多個獨特實例。所以在行var cody = new Person('Cody', true, 23, 'male');'這'指的是cody var,在下一行它指的是john var。在你的代碼中,'this'指向你的cody變量,因爲它位於cody對象內部,但它不是必須的,因爲你沒有創建具有自己的值的新代碼。

+0

謝謝夥伴,那很清楚。 –

+0

*「在你的代碼中,這個'是指你的cody變量,因爲它在cody對象內部」* - 不,它不。在JS中,this的值取決於函數的調用方式,而不是函數的定義。 – nnnnnn

+0

@nnnnnn在他的代碼中,'this'在對象字面量內而不是函數內。 – LukasGuptaLeary

6

this涉及所討論的結構的當前實例化。例如,下面將失敗:

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return cody.gender} 
}; 
var codyCopy = cody; 
cody = "foobar"; 
//undefined 
alert(codyCopy.getGender()); 

然而,使用this不會,因爲它正確地指codyCopy

var cody = { 
    living:true, 
    age:23, 
    gender:'male', 
    getGender:function(){return this.gender} 
}; 
var codyCopy = cody; 
cody = "foobar"; 
//male 
alert(codyCopy.getGender()); 
+0

非常感謝您的幫助。 –

+0

'var x = cody.getGender; alert(x());'不起作用。 (除非警告「未定義」算作工作。)'this'的值取決於你如何調用函數。 – nnnnnn

+0

@nnnnnn是的,這就是我要做的。 「this」的定義會改變的唯一原因是因爲_context_已經改變。在你的例子中,你已經緩存了屬於cody的函數,而我的例子緩存了整個cody函數,包括性別變量。所以當我們聲明cody現在等於foobar時,'this'的值沒有改變,只是'this.gender'引用的值不再存在。它並沒有與'getGender()'調用一起被緩存。 – Zatronium

相關問題