显示父对象名称的JavaScript原型继承

显示父对象名称的JavaScript原型继承,javascript,prototype,prototypal-inheritance,Javascript,Prototype,Prototypal Inheritance,我一直在阅读有关JavaScript原型继承和prototype属性的内容,我开始尝试更好地理解这些概念。但是我需要帮助理解为什么我的例子没有像我想象的那样有效 在下面的示例中,我尝试创建一个层次结构,其中当您创建一个对象时,它会告诉您父对象的名称。但是,我的日志总是返回“object” 一篇文章解释了原型链接的工作原理,因此,如果在对象上找不到属性,则会检查父对象的原型,并且它会一直上升到“object”,如果找不到,则返回undefined 这里有一把小提琴: Object.prototy

我一直在阅读有关JavaScript原型继承和prototype属性的内容,我开始尝试更好地理解这些概念。但是我需要帮助理解为什么我的例子没有像我想象的那样有效

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

一篇文章解释了原型链接的工作原理,因此,如果在对象上找不到属性,则会检查父对象的原型,并且它会一直上升到“object”,如果找不到,则返回undefined

这里有一把小提琴:

Object.prototype.cname='Object';
功能植物(){
函数parentname(){返回this.cname;}
返回{
parentname:parentname
}
}
plant.prototype.cname='plant';
函数{
函数parentname(){返回this.cname;}
返回{
parentname:parentname
}
}

番茄。原型=新植物();// 通常,构造函数会使用
this.foo=bar
等语句修改
new
创建的对象,并且不会返回任何内容。然后,
new
表达式的结果就是对象

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

要修复代码,只需将其设置为:

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

    this.parentName = parentName;
}

等等,我只是重读了一遍。那么如何创建一个新工厂呢?请参阅我的更新代码。这次我不会从构造器那里返回任何东西。同样的result@AbdulAhmad:您在cname前面缺少此项。您错误地混合了两种不同的样式。一个是new,另一个是从没有new调用的函数返回文本对象。