爲了探索使用此標識符的函數的javascript作用域規則 ,我編寫了以下代碼段。我期望person.helloFunk()的第二個調用 打印名稱「Marvin」和年齡「非常非常古老」,因爲我 在函數對象本身上創建了屬性navn和age,但事實並非如此。 代替它重複相同的輸出「你好,我是zaphod,我42歲」。 那麼爲什麼它是指函數所嵌入的對象,而不是函數本身(它也是一個對象)?使用此標識符的函數的javascript作用域規則
var sayHello = function() {
return "Hello, I'm " + this.navn + " and I'm " + this.age + " years old.";
}
var person = {navn: 'zaphod', age: 42};
person.helloFunk = sayHello;
console.log(person.helloFunk());
sayHello.navn = 'Marvin';
sayHello.age = 'verry verry old';
console.log(person.helloFunk());
console.log(person.helloFunk.navn);
console.log(person.helloFunk.age);
我認爲將函數('sayHello')作爲上下文傳遞給'call','apply'和'bind'實際上是一個壞主意,也是一個壞例子。它應該是該函數用作「this」的對象。 – Ziarno 2015-01-09 21:57:25
@Ziarno - 在這種情況下,它已經添加了必要的數據 - 而且函數*畢竟是JavaScript中的一個對象。 'sayHello instanceof Object === true' – 2015-01-09 22:04:47