使用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
上,但这不是我练习的重点。
答案 0 :(得分:1)
链接文章中的功能继承未使用call
。
如果我错了,请纠正我。 Array
函数碰巧有一个特殊的实现,但这与这个问题是正交的。为了使函数继承起作用,需要编写构造函数来支持它。
您的Array.call
方法有时用于模拟继承,但是这种方法需要从构造函数内部直接分配给实例的方法,这在大多数情况下可能是例外而不是规则。
答案 1 :(得分:0)
首先,功能继承允许您避免一起引用this
关键字。您链接的示例清楚地显示了这一点。
Array
全局对象是实现定义的,但我们可以假设所有属性都分配给__proto__
而不是this
。