如何给js内建对象构造器添加getter和setter

gettersetter的调用方式很酷
不用写()执行括弧,就能实现调用函数

当我们给创建一个对象构造器Person的时候:

function Person(value) {
    this.counter = value;
}

我们可以给对象构造器Person添加一个getter或者setter方法:

Person.prototype = {
    get increment () {
        this.counter++;
    }
}

这样当我们new Person的时候就可以不带执行括弧()的方式调用increment

var person = new Person(3)
person.increment
console.log(person.counter) // 4

问题:

同理,当我们new一个数组的之前,我们用同样的方式也给数组添加一个getter

Array.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.9k
1 个回答
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏