具有函数继承的对象扩展数组

Object extending Array with Functional Inheritance

本文关键字:对象 扩展 数组 继承 函数      更新时间:2023-09-26

使用函数继承,我们可以通过将对象作为分配给this的函数调用的上下文来扩展对象。

这似乎不像我对Array构造函数所期望的那样工作。

var ctx = {
    foo: "foo"
};
Array.call(ctx);

ctx -> Object(foo: "foo")

相反,这确实适用于其他构造函数外观函数。

var fakeArrayConstructor = function () {
    this.length = 5;
}
fakeArrayConstructor.call(ctx);

ctx -> Object {foo: "foo", length: 5}

构造函数Array是否不使用this分配其某些属性,或者是否还有其他事情发生?我知道许多与数组相关的功能都存储在Array.prototype但这不是我本练习的重点。

链接文章中的函数继承不使用call

如果我错了,请纠正我。Array函数恰好有一个特殊的实现,但这与这个问题是正交的。为了使函数继承工作,需要编写构造函数来支持它。

Array.call方法有时用于模拟继承,但此方法要求直接从构造函数内部将方法分配给实例,在大多数情况下,这可能是例外而不是规则。

首先,函数继承允许您避免一起引用 this 关键字。您链接的示例清楚地表明了这一点。

全局对象Array是实现定义的,但我们可以假设所有属性都分配给__proto__而不是this