gpt4 book ai didi

JavaScript 原型(prototype)继承显示父对象名称

转载 作者:行者123 更新时间:2023-12-02 15:39:02 24 4
gpt4 key购买 nike

我一直在阅读有关 JavaScript 原型(prototype)继承和原型(prototype)属性的内容,并且我开始制作 fiddle 来更好地理解这些概念。但我需要帮助来理解为什么我的示例没有像我想象的那样工作。

在下面的示例中,我尝试创建一个层次结构,当您创建对象时,它会告诉您父对象的名称。但是,我的日志总是返回“object”。

一篇文章解释了原型(prototype)链的工作原理,如果在对象上找不到属性,则会检查父级的原型(prototype),并继续向上直到“Object”,如果没有找到,则返回未定义。

这里有一个 fiddle :http://jsfiddle.net/hqozqd0m/

Object.prototype.cname = 'object';

function plant() {
function parentname() { return this.cname; }
return {
parentname:parentname
}
}
plant.prototype.cname = 'plant';

function tomato() {
function parentname() { return this.cname; }
return {
parentname:parentname
}
}
tomato.prototype = new plant(); // <-- settings it to plant as parent

var p = new plant();
var t = new tomato();

console.log(p.parentname()); //object
console.log(t.parentname()); //object

<小时/>

更新的代码 - 相同的结果

Object.prototype.cname = 'object';

function plant() {
this.sayparentname = function() { console.log(cname); };
}
plant.prototype.cname = 'plant';

function tomato() {
this.sayparentname = function() { console.log(cname); };
}
tomato.prototype = new plant();

var p = new plant();
var t = new tomato();

p.sayparentname();
t.sayparentname();

最佳答案

通常构造函数会使用诸如 this.foo = bar 之类的语句修改 new 创建的对象,并且不返回任何内容。那么new表达式的结果就是对象。

但是,如果该函数返回一个对象,则该对象将替换 new 创建的对象;因此,当您使用 new plant() 时,您只是得到一个普通的 Object 实例。

要修复您的代码,您只需如下所示:

function Plant() {
function parentName() { return this.cname; }

this.parentName = parentName;
}

关于JavaScript 原型(prototype)继承显示父对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723762/

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