getter和setter的调用方式很酷不用写()执行括弧,就能实现调用函数当我们给创建一个对象构造器Person的时候:function Person(value) {
this.counter = value;
}我们可以给对象构造器Person添加一个getter或者setter方法:Person.prototype = {
get increment () {
this.counter++;
}
}这样当我们new Person的时候就可以不带执行括弧()的方式调用incrementvar person = new Person(3)
person.increment
console.log(person.counter) // 4问题:同理,当我们new一个数组的之前,我们用同样的方式也给数组添加一个getterArray.prototype = {
get increment() {
this[0]++;
}
}
var arr = new Array(1,3);
arr.increment
console.log(arr) // Array(2)[ 1,3 ]语法没有报错,但事情却毫无疗效。我想知道这是为什么?但是当你给将其写成一个方法的时候,它实际上是有疗效的Array.prototype.increment = function() {
this[1]++;
}
var arr = new Array(1,3);
arr.increment()
console.log(arr) // Array(2)[ 1,4 ]
1 回答
函数式编程
TA贡献1807条经验 获得超9个赞
Array.prototype = { get increment() { this[0]++; } }
这种是直接修改了Array.prototype为另一个对象了 如果修改成功了那数组的push之类的方法就对没了 可以基本认为就不是数组了 所以是不容许修改的 你可以在严格模式下修改试试 是报错了的
可以这样修改
Object.defineProperty(Array.prototype,'increment',{ get(){ return this[0]++; } }) var arr=[1,2,3]; arr.increment; console.log(arr); arr.increment; console.log(arr);
添加回答
举报
0/150
提交
取消