JS - 对象(3)

get, set

属性 getter/setter 方法

var man = {
    name: 'sunorry',
    weibo: '@sunorry',
    get age() {
        return new Date().getFullYear() - 1990;
    },
    set age(val) {
        console.log('Age can\'t be set to ' + val);
    }
};

console.log(man.age); // 25
man.age = 100; // Age can't be set to 100
console.log(man.age); // still 25

更复杂的例子
var a = "abc";
+a; // NaN

var man = {
    weibo: '@sunorry',
    $age: null, //不想暴露给外部
    get age() {
        if(this.$age == undefined) {
            return new Date().getFullYear() - 1990;
        } else {
            return this.$age;
        }
    },
    set age(val) {
        val = +val; // 尝试转换成数字
        if(!isNaN(val) && val > 0 && val < 150) {
            this.$age = +val;
        } else {
            throw new Error('Incorrect val = ' + val);
        }
    }
}

console.log(man.age); // 27
man.age = 100;
console.log(man.age); // 100
man.age = 'abc'; // error: Incorrect val = NaN

get / set 与原型链

function foo() {}

Object.defineProperty(foo.prototype, 'z', {
    get: function() {
        return 1;
    }
});

var obj = new foo();

obj.z; // 1
obj.z = 10;
obj.z; // still 1

Object.defineProperty(obj, 'z', {
    value: 100,
    configurable: true
});
obj.z; // 100;
delete obj.z;
obj.z; // back to 1
var o = {};
Object.defineProperty(o, 'x', {
    value: 1
}); // writeable=false, configurable=false
var obj = Object.create(o);
obj.x; // 1
obj.x = 200;
obj.x; // still 1, can't change it

Object.defineProperty(obj, 'x', {
    writeable: true,
    configurable: true,
    value: 100
});
obj.x; // 100
obj.x = 500;
obj.x; // 500
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 10,842评论 0 7
  • 对象: 1. 对象中包含一系列的属性,这些属性是无序的。 2. 每个属性都有一个字符串key和对应的value;(...
    一树青枫阅读 2,778评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,241评论 19 139
  • 作者:clearbug原文地址:http://www.cnblogs.com/craftsman-gao/p/48...
    IT程序狮阅读 4,210评论 1 8
  • 第二章:眼皮底下? 暑去冬来,斗转星移,一转眼,已是七年时光,当年震惊云天帝国上下的逍遥镇灭镇惨案,也渐渐淡出了人...
    江畔晨曦阅读 1,810评论 0 0

友情链接更多精彩内容