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控制台里面输出测试了下,便于理解. ...
随机推荐
- WebSphere数据源配置
WebSphere data source Configuration login http://localhost:9061/ibm/console/login.do(According to yo ...
- C++ Tempatet之模板模型
模板一共有三种类型: 1.第一种包含模型:包含模型是讲模板的定义和声明都放在头文件里(注:一般我们写的代码是将声明放在头文件里,实现放在cpp里,防止产生两份实现代码) 缺点:包含模型会增加代码的量. ...
- SQLSERVER中WITH(NOLOCK)详解
在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST .有关 NOLOCK 和 READPAST的一些技术知识 ...
- 动态调用WCF服务
动态调用WCF服务,只需要提供*.svc地址, 1:命名空间: using System.ServiceModel.Channels;using System.ServiceModel; 2:创建访问 ...
- ASP.NET MVC中几个运用技巧
1. Razor Helpers 的运用:例如,定义好 ViewBag.Message = "Welcome to ASP.NET MVC!";我要在界面上显示"Welc ...
- associated 2 maps
<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content= ...
- c3p0 --1
# # This file is detritus from various testing attempts # the values below may change, and often do ...
- Sqli-labs less 41
Less-41 此处与less-39是一致的,区别在于41错误不回显.所以我们称之为盲注. Payload: http://192.168.11.189/sqli-labs/Less-41/index ...
- Sqli-labs less 42
Less-42 Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化.在select调用的时候才能发挥作用.所以不用考虑在更新密 ...
- iOS第三方解决键盘遮挡-IQKeyboardManager
百度云:http://pan.baidu.com/s/1yg5ae githun:https://github.com/hackiftekhar/IQKeyboardManager AppDelega ...