簡體   English   中英

有關JavaScript中繼承的問題

[英]Question regarding Inheritance in JavaScript

你能解釋下面提到的兩個代碼之間的區別嗎?

function Person(){} 
Person.prototype.dance = function(){}; 

function Ninja(){} 

Ninja.prototype = Person.prototype; 

function Person(){} 
Person.prototype.dance = function(){}; 

function Ninja(){} 


Ninja.prototype = new Person();

我對這些方面感到困惑:

Ninja.prototype = Person.prototype; 

Ninja.prototype = new Person();

我開始知道第二個支持繼承而第一個支持繼承,你能解釋一下第二個中的魔法是什么嗎?

  1. 設置Ninja.prototype = Person.prototype; 是說所有忍者都是人,所有人都是忍者 ,因為它只是使兩個原型指向同一個東西。 因此,更改Ninja.prototype將更改Person.prototype ,反之亦然。

  2. 設置Ninja.prototype = new Person(); 我說Ninjas都是一個普通人 ,但是Ninja.prototype可以在不改變Person定義的情況下進行修改。 這里的關鍵是new關鍵字,它創建了Person的唯一實例 ,因此可以自由修改而不會影響其他任何內容。


Ninja.prototype = Person.prototype

Ninja的原型定義為與Person相同:

function Person() {}
Person.prototype.dance = function () {}; // A Person can dance

function Ninja() 
Ninja.prototype = Person.prototype; // Now a Ninja can dance too!

實例 Ninja有能力Person

var ninja = new Ninja();
ninja.dance();

但是 ,對Ninja定義的修改也會影響Person實例:

Ninja.prototype.kill = function () {}; // Oh no! Now a Person can kill too!
var bob = new Person();
bob.kill(); // Not what we wanted...

Ninja.prototype = new Person()

以與以前相同的方式定義Person

function Person(){};
Person.prototype.dance = function () {}; // A Person can dance

現在我將Ninja.prototype = new Person()分為兩個步驟。 首先,創建一個名為defaultNinja的新Person

var defaultNinja = new Person(); // Despite the name, it's just a regular Person

然后將所有Ninja定義為默認值:

function Ninja(){};
Ninja.prototype = defaultNinja; // Really the same as Ninja.prototype = new Person();

這一次,如果我們改變Ninja可以做的事情:

Ninja.prototype.kill = function () {};
// OR,
defaultNinja.kill = function () {};

實例Person不會受到影響:

ninja.kill(); // Now the ninja can kill
var bob = new Person();
bob.kill(); // ERROR, because Person.prototype doesn't have kill(),
            // only defaultNinja does

暫無
暫無

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

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