亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何給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 關注
  • 816 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號