为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2018-10-03 13:18:19
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);


查看完整回答
反对 回复 2018-10-08
  • 1 回答
  • 0 关注
  • 734 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信