簡體   English   中英

javascript原型繼承覆蓋方法

[英]javascript prototype inheritance overwriting methods

這是我現在所擁有的

var Proto = function(){
    this.up = function(){ alert('hello'); };
};

Proto.prototype.up = function(){ alert('world'); };

new o = Proto();

alert(o.up); // prints "hello"

我希望這會打印“世界”,因為我覆蓋了該方法。 任何幫助表示贊賞。

請參閱以下代碼段:

var MyClass = function () {
    this.print = function logAttachedToThis() { console.log('hello'); };
};
MyClass.prototype.print = function logAttachedToPrototype() { console.log('world'); };
console.log(new MyClass());

輸出將是:

MyClass {print: ƒ}
print: ƒ printAttachedToThis()
__proto__:
  print: ƒ printAttachedToPrototype()
  constructor: ƒ ()
  __proto__: Object

調用new MyClass().print() ,引擎將首先檢查對象本身是否有print可用。 否則,它將檢查原型鏈。 所以實際上, this.print = ...覆蓋了MyClass.prototype.print = ... 雖然不確定在這種特定情況下覆蓋是正確的詞,但我會改用隱藏

您需要了解原型鏈是如何工作的,首先引擎會在當前對象中找到函數,即 Proto 對象,因為 up() 在那里可用,所以它不會在原型中搜索。 但是如果它不是寫在 Proto 對象中,那么它會在原型中搜索它。

這是我寫的一篇關於原型和繼承的文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM