如何定义扩展标准 JavaScript 类(如 Array)的新类
How to define a new class extending standard javascript class like Array?
我的理解是,定义扩展ClassA的新ClassB的"标准"方法如下:
function ClassA() {
this.a = {}; // ClassA's instance member.
}
ClassA.prototype.meth1 = function () { .. } // ClassA's method, shared by all instance.
function ClassB() {}
ClassB.prototype = new ClassA() // <== "standard" way to extend
ClassB.prototype.meth2 = function () {...} // ClassB's method
当我尝试定义一个新的类 ArrayX 时,如下所示:
function ArrayX() {
}
ArrayX.prototype = new Array()
ArrayX.prototype.removeDup = function removeDup() {
var o = [];
for(var j=0; j<this.length; j++) {
if(notExist(this[j])
o.push(this[j])
}
return o
function notExist(itm) {
for(var j=0; j<o.length; j++) {
if(o[j]===itm)return false
}
return true;
}
var x = new ArrayX();
console.log(x.length) // returns 0. Good
console.log(x) // returns []. Good
x[0] = 0;
console.log(x); // returns []. No good. I expect x should have one element.
(new ArrayX([1,1,2,3,3])).removeDup() // I expect returns [1,2,3]
我知道我可以通过以下方式定义函数删除Dup:
Array.prototype.removeDup = function removeDup() { ...}
但是,我只想定义一个新类,扩展一些标准的javascript类,如Array,甚至是DOM类。
那么,如何定义一个扩展标准JavaScript类的新类,如Array?
不需要创建一个自己的类:
Array.prototype.myFunction = function(){
//your custom code
}
通过引用链接#1,链接#2和链接#3,我尝试这样做,它按预期工作。
function ArrayX() {
// Array.apply(this, arguments)
// calling Array() has same effect as new Array() according to
// [link#3]
// It is no good here.
this.push.apply(this, arguments); // <-- this works OK. Suggested by link#2
debugger; // Now, `this` has array of value [1, 1, 2, 3, 3], which is
// found in arguments when running new ArrayX(1,1,2,3,3);
// Good.
}
ArrayX.prototype = new Array(); // Suggested by link#1
ArrayX.prototype.removeDup = function removeDup() {
var o = [];
for(var j=0; j<this.length; j++) {
if(notExist(this[j]))
o.push(this[j])
}
return o
function notExist(itm) {
for(var j=0; j<o.length; j++)
if(o[j]===itm)return false
}
return true;
}
var x = new ArrayX(1,1,2,3,3); // x is now [1,1,2,3,3]. Good
console.log(x.length) // 5 Good
var y = x.removeDup(); // y is [1,2,3]. Good
console.log(y);
相关文章:
- 用类javascript包装span标记中字符串中的字符索引
- 在类JavaScript选择的另一个元素中选择一个标记元素
- 从自身的一个版本中创建新的JavaScript对象
- 无法删除css类并添加新类
- 将新类实例中的数据存储在数组中
- 这是一个新的javascript工厂模式吗
- 如何使用其他 JavaScript 文件中的新类访问我的 createjs 导出的 js 文件
- 新的javascript HTML元素不遵循css规则
- HTML5 window.history 不会运行新的 JavaScript
- 将“e”传递给一个新函数 - javascript
- 更改类,但单击不识别新类
- Jquery类选择器无法选择用.append()添加的新类实例
- Javascript根据屏幕大小编写新的Javascript链接
- Backbone app:将参数传递给由javascript/Require模块创建的新类
- 如何定义扩展标准 JavaScript 类(如 Array)的新类
- Javascript 不适用于 changeClass() 之后的新类项
- 在javascript中实例化一个新类时,不将其分配给变量有什么害处
- Javascript在body标记中添加新类
- 如何在运行时动态创建新的 Javascript 对象,仅给定它们的类名
- 新"使用javascript中的类