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


var obj1 = {
    name: 'shaanxi',
    get nameGet() {
        return this.name + 'a';
    },
    set nameSet(name) {
        this.name = name;
    }
};

console.info(obj1.nameGet); //shaanxia
obj1.nameSet = 'set by set keywords';
console.info(obj1.nameGet); //set by set keywordsa

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

var obj2 = {
    name: 'shaanxi'
};

obj2.__defineGetter__('nameGet', function() {
    return this.name;
});
obj2.__defineSetter__('nameSet', function(
    name) {
    this.name = name;
});
var ref1 = obj2.__lookupGetter__('nameGet');
var ref2 = obj2.__lookupSetter__('nameSet');
console.info(obj2.nameGet); //shaanxi
obj2.nameSet = 'set by __defineSetter__';
console.info(obj2.nameGet); //set by __defineSetter__

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

var obj3 = {
    name: "shaanxi"
};
Object.defineProperties(obj3, {
    nameGet: {
        value: function() {
            return this.name;
        }
    },
    nameSet: {
        value: function(name) {
            this.name = name;
        }
    }
});

console.info(obj3.nameGet()); //shaanxi
obj3.nameSet('set by Object.defineProperty');
console.info(obj3.nameGet()); //set by Object.defineProperty

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


免責聲明!

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



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