Gab*_*ans 5 javascript arrays overriding function
我正在寻找一种方法来覆盖JavaScript中的Object的.length属性.
我目前在parent.properties.objects数组上有一个包装器
(父用于使代码在上下文中更具可读性)
这是基本结构:
(父变量在命名空间中定义并初始化)
var parent = function () {
this.properties = {
objects: [];
};
};
Run Code Online (Sandbox Code Playgroud)
(function () {
"use strict";
objects = function () {
Run Code Online (Sandbox Code Playgroud)
如果没有传递参数,则假设get
if (arguments.length === 0) {
var _objects = parent.properties.objects;
return _objects;
Run Code Online (Sandbox Code Playgroud)
修改或过滤对象
} else if (arguments.length > 0) {
...
}
};
Run Code Online (Sandbox Code Playgroud)
这会创建一个object.prototype(不是[prototype])变量并添加方法长度()
objects.prototype.length = function () {
var length = parent.properties.objects.length;
return length;
}
Run Code Online (Sandbox Code Playgroud)
错误
objects.prototype.__proto__.length = function () {
var length = parent.properties.objects.length;
return length;
}
parent.objects = objects;
})();
Run Code Online (Sandbox Code Playgroud)
假设我正确理解了您的问题,以下代码可能会帮助您:
function MyObject() {
this.myActualData = [];
}
Object.defineProperty(MyObject.prototype, 'length', {get: function() {
return this.myActualData.length;
}});
Run Code Online (Sandbox Code Playgroud)
这是一个使用中的示例:
var x = new MyObject();
x.myActualData.push("Hello");
x.myActualData.push("World");
x.length; // is 2
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于 ecmascript 5 及更高版本的浏览器。