![](/img/trans.png)
[英]JavaScript: Inheritance by prototype, without using prototype to define/call methods
[英]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.