具有函数继承的对象扩展数组
Object extending Array with 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
但这不是我本练习的重点。
链接文章中的函数继承不使用call
。
如果我错了,请纠正我。Array
函数恰好有一个特殊的实现,但这与这个问题是正交的。为了使函数继承工作,需要编写构造函数来支持它。
Array.call
方法有时用于模拟继承,但此方法要求直接从构造函数内部将方法分配给实例,在大多数情况下,这可能是例外而不是规则。
首先,函数继承允许您避免一起引用 this
关键字。您链接的示例清楚地表明了这一点。
全局对象Array
是实现定义的,但我们可以假设所有属性都分配给__proto__
而不是this
。
相关文章:
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- FabricJS CurvedText对象(扩展)在更新间距和文本属性时未显示
- 如何为特定的javascript对象扩展数组或对象原型
- 具有函数继承的对象扩展数组
- 将 jQuery 对象扩展到我自己的对象
- HTMLCollection 对象扩展
- Javascript 对象扩展
- jQuery用一个对象扩展$.fn
- 有没有一种方法可以在javascript中隔离本机对象扩展
- Backbone或javascript对象扩展错误
- 从另一个对象扩展而不使用object.JavaScript中的assign (ES6特性)
- 对象扩展vs.对象赋值
- 是否可以将一个对象扩展为“;一个函数
- 如何在jquery中用子对象$.扩展对象
- 为什么我有一个共享缓存时,我jQuery.使用相同的缓存对象扩展两个对象
- 使用美元.使用用户定义的对象扩展
- es7对象扩展表示法如何创建浅拷贝来替换原始对象
- 如何使用新对象扩展 $.fn
- 如何在 javascript 中让多个对象扩展 1 个对象
- IE8中对象扩展后的奇怪setAttribute行为