2017-10-04 125 views
0

看一本關於JavaScript的(我不知道,如果規則允許我寫標題和作者...)我注意到一些有關的功能,我想更好地瞭解:在對象上調用的函數和通過對象調用的函數之間有什麼區別?

如果函數被分配給一個對象的屬性,它被稱爲該對象的一種方法。當在一個對象上或通過一個對象調用一個函數時,該對象就是調用 上下文或該函數的這個值。

我想了解什麼是對對象的功能之間的區別調用和功能通過對象調用

+1

這意味着同樣的事情。 – dandavis

+0

希望這個鏈接將提供很好的解釋[鏈接](https://www.w3schools.com/js/js_function_invocation.asp) – Thennarasan

+1

@Thennarasan - 它沒有描述這個問題所提出的問題(W3Schools是一般來說很糟糕) – Quentin

回答

0

這可能不完全正確,但它是我對差異的理解。

如果調用對象方法,則在方法本身內,this會自動引用通過其調用方法的對象。

而在某個對象上調用某個函數時,可以將this的上下文綁定到您想要的任何對象。該對象不需要以任何方式與該功能相關,並且可以將相同的功能一個接一個地用於多個不同的對象。

編輯基於BERGI的反饋切換通過引用。

例如:

function Animal(name, sound) { 
    this.name = name; 
    this.sound = sound; 
} 

Animal.prototype.speak = function() { 
    console.log(this.name + ' says "' + this.sound + '"'); 
}; 

function speak() { 
    console.log(this.name + ' says "' + this.sound + '"'); 
} 

var cat = new Animal('Garfield', 'meow'); 
var dog = new Animal('Odie', 'woof'); 

// Invoke function through object 
cat.speak(); 
dog.speak(); 

// Invoke function on object 
speak.call(cat); 
speak.call(dog); 
+0

我會在這裏使用「on」和「through」。 – Bergi

+0

是的,我可以看到,現在你已經說過了。 – fubar

+0

@Bergi我同意你的解決方法更有意義,我相應地更新了我的答案。 – fubar

相關問題