繁体   English   中英

Javascript原型不继承函数……还是原型?

[英]Javascript prototype not inheriting functions… or prototype?

不确定是什么问题。 我非常确定我了解原型继承应该如何工作。 本质上,我希望使javascript对象能够从其原型继承属性/函数引用,其好处是能够从子对象调用函数,而无需将该函数重写为对象本身。

我的对象是:

function Animation(animationArguments) {
    Object.defineProperty(this, 'successfullyDuplicatedFunction', {
        value: function(){},
        enumerable : false
    });
}
Animation.prototype.gather = function() {}

repeatable.prototype = new Animation();
function repeatable(repeatableArguments) {
    Animation.call(this, repeatableArguments);
}

var createdObject = new repeatable(argumentsToPass);
    createdObject.gather(); //throws Uncaught TypeError: Object #<repeatable> has no method 'gather' 
    createdObject.successfullyDuplicatedFunction(); //successfully calls

现在,这是我感到困惑的地方。 从理论上讲,我应该能够调用repeatable.gather()来引用动画的功能集合。 但是,控制台不断告诉我它没有方法收集。 同样奇怪的是(我对怪异程度并不满意),javascript告诉我正在创建(可重复)的对象具有一个proto :repeatable,其构造函数是“函数可重复的”并且带有proto :Object。 动画对象发生了什么? 另外,更奇怪的是它成功复制了'successfullyDuplicatedFunction'并将其列为我可以调用/引用的不可枚举的属性。

如果可以的话,我在谷歌浏览器进行我的主要开发。

谁能更清楚地解释这一点? 我浏览了许多关于JavaScript原型的不同解释,并经历了此代码的许多不同迭代,以尝试使其发挥作用,就像我认为原型应该起作用一样。 因此,怪罪于此可能是我的理解...启发我吗?

因此,事实证明问题不在于我对原型的理解,而在于javascript的构造函数实现与原型继承的关系。 我试图(没有意识到它)创建一个构造函数,该构造function that routes the object creation to the object creation function required通过我的function that routes the object creation to the object creation function required定义了多个继承function that routes the object creation to the object creation function required 理想情况下,它将通过多个原型来构造从多个原型继承的对象。 原型继承支持这一点,但是javascript的伪构造器模式不支持。 为了解决这个问题,我创建了一个构造函数来解析这些参数,并将对象部分路由到唯一的原型构造函数。

我的目的是在不知道如何正确创建动态对象的情况下进行原型属性委派,该对象继承了多个原型,同时保持原型链完好无损。 我得到的是一个坦率的对象,其原型是构造函数本身。 并且由于其原型不是所需的原型,因此尝试通过委派someobject.prototype.fire = function(){};来继承函数someobject.prototype.fire = function(){}; 因为该对象继承了连接的属性function someobject(Arguments) { this.property = arguments;} ,所以它不起作用,这并不是从技术上讲是该原型的对象。 不幸的是,似乎每一个关于javascript的学习资源都几乎束缚着构造器/原型模式,甚至从来没有费心去解释为什么构造器并没有真正有助于原型继承。 除了这篇伟大的文章

我之所以得到原型链,是因为它是从构造函数本身继承其原型,这是一个简单的函数,因此是一个简单的对象。 尽管javascript支持属性委托和多重继承,但构造函数模式却不支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM