gpt4 book ai didi

javascript - 关于 JavaScript 中的继承的问题

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:30 25 4
gpt4 key购买 nike

你能解释一下下面提到的两个代码之间的区别吗?

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; 表示 all Ninjas are Persons,all Persons are Ninjas,因为它只是制作了两个原型(prototype)指向同一件事。所以改变 Ninja.prototype 会改变 Person.prototype ,反之亦然。

  2. 设置 Ninja.prototype = new Person(); 表示所有忍者开始时都是普通人,但是 Ninja.prototype 可以在不改变 Person 定义的情况下进行修改。这里的关键是 new 关键字,它创建了 Person 的唯一实例,因此可以自由修改而不影响任何其他内容。


Ninja.prototype = Person.prototype 示例

定义 Ninja 的原型(prototype)与 Person 的相同:

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

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

Ninjainstance 具有 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

关于javascript - 关于 JavaScript 中的继承的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com