gpt4 book ai didi

javascript - Javascript 中的属性继承

转载 作者:行者123 更新时间:2023-11-30 10:18:53 26 4
gpt4 key购买 nike

我有以下定义继承链的函数。

function Person(name,age) {

this.name = name;
this.age = age;
}

Person.prototype.dance = function () {
console.log("Person is dancing");
};

var Programmer = function (name, age, skills)
{
Programmer.prototype = new Person(name, age);;
this.skills = skills;
};



Programmer.prototype.talkShit = function () {
console.log("The programmer " + this.name+ " is talking shit....");
};

然后我尝试在程序员对象上调用dance()方法

  var programmerX = new Programmer("Pro A", 30, "Talking crap");

programmerX.dance();

但是,发生了一个错误,指出 dance() 是未定义。我只是想知道为什么?怎么了?

最佳答案

定义原型(prototype)继承链的方式存在一些问题。您希望在构造函数之外分配 Programmer 原型(prototype),并且您可能希望使用 Object.create 而不是 new。您还想通过调用 Person.call(this, name, age) 来调用 Programmer 构造函数中的“ super ”构造函数。我推荐这样的方法:

function Person(name, age) {
this.name = name;
this.age = age;
}

Person.prototype.dance = function() {
console.log("Person is dancing");
};

var Programmer = function(name, age, skills) {
Person.call(this, name, age);
this.skills = skills;
};

Programmer.prototype = Object.create(Person.prototype);
Programmer.constructor = Programmer;

Programmer.prototype.talkShit = function () {
console.log("The programmer " + this.name+ " is talking shit....");
};

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

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