Javascript 如何有效地原型化阵列或从阵列到重用代码?
我构建了一个解析器,我想“扩展”Array类以使用相同的函数,但在以下方面没有成功:Javascript 如何有效地原型化阵列或从阵列到重用代码?,javascript,oop,prototypal-inheritance,Javascript,Oop,Prototypal Inheritance,我构建了一个解析器,我想“扩展”Array类以使用相同的函数,但在以下方面没有成功: Array.prototype = new Parser() 我想创建一个函数,该函数将重用阵列中的移位,而无需添加: function() { return this.list.shift() } 另外,我在这个标识方面遇到了一些问题,因此: 如何有效地原型化阵列或从阵列到重用代码 提前感谢。要扩展阵列,您需要扩展其原型,如下所示 function CustomArray() {} CustomArray
Array.prototype = new Parser()
我想创建一个函数,该函数将重用阵列中的移位,而无需添加:
function() { return this.list.shift() }
另外,我在这个
标识方面遇到了一些问题,因此:
如何有效地原型化阵列或从阵列到重用代码
提前感谢。要扩展
阵列
,您需要扩展其原型,如下所示
function CustomArray() {}
CustomArray.prototype = Object.create(Array.prototype);
CustomArray.constructor = CustomArray;
CustomArray.prototype.newMethod = function() {...}
然后,您可以在CustomArray
的原型上添加所有自定义方法,如下所示
function CustomArray() {}
CustomArray.prototype = Object.create(Array.prototype);
CustomArray.constructor = CustomArray;
CustomArray.prototype.newMethod = function() {...}
我使用
Array.prototype.parser=function(){//your parser}
首先,请参阅本文:
第二,您想扩展解析器来派生数组的方法,还是反之亦然?基本上,让解析器从数组中派生方法是可以的,但您的原型分配是错误的
Parser.prototype = [];
你是那样试的吗
关于您的问题,发布的代码不完整,是吗
编辑:一些示例:
function Parser() { this.__a = 1; }
Parser.prototype = [];
var a = new Parser;
a.length
// gives 0
a.push( 2 );
// gives 1
a.length
// gives 1
a.__a
// gives 1
编辑2:注释中给出的使用构造函数的示例:
function Parser() {
var args = [].slice.call( arguments );
args.unshift( 0 );
args.unshift( 0 );
[].splice.apply( this, args );
}
Parser.prototype = [];
var c = new Parser( 1, 2, 3 )
c.length
// gives 3
当我做Parser.prototype=[]
时,这个变成了一个窗口。使用这个是非常特别的这是函数上下文中的一个特殊局部变量,仅在调用时声明。如果我使用Parser.prototype。那么我如何才能将[1,2,3,4]转换成新的解析器(1,2,3,4)。您的“构造函数”可能会使用参数使用push()将其所有元素推送到数组中。。。虽然没有性能,但对于这种语法糖来说已经足够了。在这里提供之前,在Google Chrome中尝试了上面的第二个示例。此时此刻再次尝试了NodeJS。它在这两种情况下都能工作,这次我能够附加c.shift()代码>四次给我1
,2
,3
和未定义的。。。因此,它正在发挥作用。你在什么环境下工作?您的测试引擎/浏览器是什么?虽然这会将数组方法添加到自定义对象中,但不会使其行为类似于数组。例如,使用属性分配,如obj[3]=42代码>不会增加“自定义数组”的长度。我只是想说清楚。