具有功能继承的对象扩展数组

时间:2015-02-01 12:58:51

标签: javascript arrays prototypal-inheritance

使用functional inheritance我们可以通过将对象作为分配给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上,但这不是我练习的重点。

2 个答案:

答案 0 :(得分:1)

链接文章中的功能继承未使用call

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

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

答案 1 :(得分:0)

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

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