javascript中对象的属性的特性
1.ES5的属性特性包括下面六个:
var person = {};
Object.defineProperty(person, "name", {
writable: false,//设置属性的特性为不可修改的
value: "Tom" //把name属性值设为Tom
});
person.name = "Jany"; //试图把name属性值设置为Jany,但是失败了.非严格模式下会忽略此语句,严格模式则会报错的
console.log(person.name); //结果仍然为Tom
var person = {};
Object.defineProperty(person, "name", {
configurable: false, //把configurable设置为false
value: "Tom"
});
console.log(person.name); //打印结果为Tom
delete person.name; //试图删除name属性
console.log(person.name); //但是name仍然存在,打印出Tom
var person = {};
Object.defineProperty(person, "name", {
configurable: true,
value: "Tom"
});
console.log(person.name); //打印出Tom
delete person.name; //试图删除name属性
console.log(person.name); //删除成功,打印出udefined
var person = {};
//把person.name属性的configurable设置为false;
Object.defineProperty(person, "name", {
configurable: false,
value: "Tome"
});
//然后试图重新把person.name属性的configurable设置为true;但是浏览器出现报错信息。
Object.defineProperty(person, "name", {
configurable: true,
value: "lyl"
});
console.log(person.name);
//定义一个对象book
var book = {
_year: 2004, //出版年份
edition: 1 //版本号
};
//定义year属性的特性
Object.defineProperty(book, "year", {
//重写get方法,即如果我们试图book.year获取year值时,实质上是获取book._year的值
get: function() {
return this._year;
},
//重写了set方法,每当对book.year进行赋值时,则相应的修改book._year和book.edition的值
set: function(newValue) {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
} }); book.year = 2005;
console.log(book.edition); //
var book = {};
Object.defineProperties(book, {
// 定义一个新的属性_year,并且他的值为2004
_year: {
value: 2004
},
// 定义一个新的属性edition,并且他的默认值是1,而且属性值是可修改的
edition: {
value: 1,
writable: true// 可修改的
},
// 定义一个新的属性year,并且重写了他的get和set方法
year: {
get: function() {
return this._year;
},
set: function(newValue){
if(newValue > 2004) {
//alert("ok");
this._year = newValue;
this.edition += newValue-2004;
}
}
}
});
book.year = 2006;
console.log(book.edition);//
读取属性的特性,使用Object.getOwnPropertyDescriptor方法var book = {};
// 为该对象定义一些属性
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1,
writable: true// 可修改的
},
year: {
get: function() {
return this._year;
},
set: function(newValue){
if(newValue > 2004) {
//alert("ok");
this._year = newValue;
this.edition += newValue-2004;
}
}
}
});
//获取_year属性的特性
var descriptor1 = Object.getOwnPropertyDescriptor(book, "_year");
console.log(descriptor1.configurable); //false
console.log(descriptor1.enumberable); //undefinded
console.log(descriptor1.writable); //false
console.log(descriptor1.value); //
console.log(descriptor1.get); //undefined
console.log(descriptor1.set); //undefined
console.log("\n");
//获取year属性的特性
var descriptor2 = Object.getOwnPropertyDescriptor(book, "year");
console.log(descriptor2.configurable); //false
console.log(descriptor2.enumberable); //undefined
console.log(descriptor2.writable); //undefined
console.log(descriptor2.value); //undefined
console.log(descriptor2.get); //function()
console.log(descriptor2.set); //function(value)
javascript中对象的属性的特性的更多相关文章
- JavaScript中对象的属性
在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...
- JavaScript中对象的属性类型
JavaScript中,对象的属性有两种:数据属性和访问器属性. 数据属性 特性: 数据属性包括一个数据值的位置.在这个位置可以读取和写入值.数据属性有4个特性. [[configurable]]:可 ...
- JavaScript中对象的属性:如何遍历属性
for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = & ...
- 记录,javascript中对象的属性名是字符串,却可以不用引号
问题描述:今日看书,里面介绍js的对象的属性名是包括空字符串在内的所以字符串 问题来了,我们平时定义的对象如下,是没有引号""or’'的 var someone = { f ...
- 关于JavaScript中对象的继承实现的学习总结
一.原型链 JavaScript 中原型链是实现继承的主要方法.其主要的思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.实现原型链有一种基本模式,其代码如下. function Super ...
- Javascript中对象的Obeject.defineProperty()方法-------------(ES5/个人理解)
在讲到Obeject.defineProperty()方法之前先得说明一下ECMAScript中有两种属性:数据属性和访问器属性. 两种属性存在的意义:描述对象属性(key)的一些特性,因为这些属性是 ...
- javascript中对象字面量的理解
javascript中对象字面量与数组字面量 第一部分 我们知道JavaScript中的数据类型有基本数据类型和引用类型,其中Object类型就是非常常用的类型.那么如果创建一个Object类型的实例 ...
- javascript中对象的深度克隆
记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...
- javascript中常用坐标属性offset、scroll、client
原文:javascript中常用坐标属性offset.scroll.client 今天在学习js的时候觉得这个问题比较容易搞混,所以自己画了一个简单的图,并且用js控制台里面输出测试了下,便于理解. ...
随机推荐
- hdu 4685 二分匹配+强连通分量
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4685 题解: 这一题是poj 1904的加强版,poj 1904王子和公主的人数是一样多的,并且给出 ...
- BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 608 Solved: 199[Submit][ ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...
- 项目分析(map复习)
有段时间没看map里面的东西了,刚才看发现功能上增加了一些,在来复习了一次流程初始化每个map建立线程,这个线程有两个功能,1.处理GS发过来的包 2.驱动map里面的定时器GS发过来的包是存在m_g ...
- vector存入共享内存(了解)
昨天在上篇blog里描写了如何把STL容器放到共享内存里去,不过由于好久不写blog,发觉词汇组织能力差了很多,不少想写的东西写的很零散,今天刚好翻看自己的书签,看到一篇挺老的文章,不过从共享内存到S ...
- 理解Linux系统负荷[转]
一.查看系统负荷 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用.) 二.一个类比 我们不妨把这个CPU想象成一座大桥, ...
- 封装dll遇到的奇葩错误:error LNK2005: _DllMain@12 已经在 DLLMain.obj 中定义
在定义一个dll工程的时候,一添加MFC的头文件就会报出这个 错误:error LNK2005: _DllMain@12 已经在 DLLMain.obj 中定义 既蛋疼又蛋疼!! 然后逛论坛,查资料 ...
- iOS-CAEmitterLayer(粒子效果)
扩展:https://github.com/lichtschlag/Dazzle ; , , , ); , ); .f; .f; ; .f; .f; ...
- PageControl(弹性滚动)
使用网上源码KYAnimatedPageControl self.pageControl = [[KYAnimatedPageControl alloc]initWithFrame:CGRec ...
- POJ 1469
#include<iostream> #include<stdio.h> #include <string.h> #include <vector> # ...