我使用Object.defineProperty将数组定义为Object上的属性。 在这种情况下,我如何利用通常的数组函数?
下面是相同的代码:
function Foo(){
this._myArray = null;
}
Object.defineProperty(Foo.prototype, 'someArray', {
get: function(){
return this._myArray;
},
set: function(newValue){
console.log('set is ' + newValue);
this._myArray = newValue;
checkFunction();
},
enumerable: true,
configurable: true,
push: function(newValue){
console.log('push is ' + newValue);
this._myArray.push(newValue);
}
});
function checkFunction(){
console.log('hello');
}
var test = new Foo();
test.someArray = [1,2];
test.someArray.push(3);
您会注意到以下调用不起作用:
test.someArray.push(3);
Plnkr在这里可用:http://plnkr.co/edit/HiYPycAN4bloJa44ANWC