js對象,set和get方法 的三種實現形式


 1   var obj1 = {
 2         name: 'shaanxi',
 3         get nameGet() {
 4             return this.name + 'a';
 5         },
 6         set nameSet(name) {
 7             this.name = name;
 8         }
 9     };
10 
11     console.info(obj1.nameGet);  //shaanxia
12     obj1.nameSet = 'set by set keywords';  
13     console.info(obj1.nameGet);  //set by set keywordsa

第一種方式,直接在對象內設置。如代碼所示。

 1   var obj2 = {
 2         name: 'shaanxi'
 3     };
 4 
 5     obj2.__defineGetter__('nameGet', function() {
 6         return this.name;
 7     });
 8     obj2.__defineSetter__('nameSet', function(
 9         name) {
10         this.name = name;
11     });
12     var ref1 = obj2.__lookupGetter__('nameGet');
13     var ref2 = obj2.__lookupSetter__('nameSet');
14     console.info(obj2.nameGet);  //shaanxi
15     obj2.nameSet = 'set by __defineSetter__';
16     console.info(obj2.nameGet);  //set by __defineSetter__

第二種方式:使用原型方法進行設置

 1  var obj3 = {
 2         name: "shaanxi"
 3     };
 4  Object.defineProperties(obj3, {
 5         nameGet: {
 6             value: function() {
 7                 return this.name;
 8             }
 9         },
10         nameSet: {
11             value: function(name) {
12                 this.name = name;
13             }
14         }
15     });
16 
17     console.info(obj3.nameGet());  //shaanxi
18     obj3.nameSet('set by Object.defineProperty');
19     console.info(obj3.nameGet());  //set by Object.defineProperty

第三種方式:使用Object.defineProperty()和Object.defineProperties()進行設置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM