javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置
属性的特性
每个对象都拥有属性,属性具有哪些特性呢?
1、属性具有值。
2、属性是否是可写的。
3、是否是可枚举的。
4、是否是可配置的。
"use strict";//使用严格模式
var descriptor = Object.getOwnPropertyDescriptor({ x: 1 }, "x");//获取匿名对象的值
alert("value:" + descriptor.value + "\r\n writeable:" + descriptor.writable + "\r\n enumberable:" + descriptor.enumerable + "\r\n configurable:" + descriptor.configurable);//value: 1 writeable:true enumberable:true,configurable:true var baseDescriptor = Object.getPrototypeOf({ x: 2 });
for(var p in baseDescriptor)
{
alert(p);//内置属性不可被枚举。
}
var o = {};
Object.defineProperty(o, "y", { value: 1, writable: true, enumberable: false, configurable: true });//设置属性的特性。
var oDescriptor = Object.getOwnPropertyDescriptor(o, "y"); Object.defineProperties(o, {
x: { value: 3, writable: false, enumberable: true, configurable: true },
z: { get: function () { return this.x + 1; }, enumerable: true, configurable: true }//get表示只读属性,set可设计写属性。
});
alert(o.y);
alert("\r\n value:" + oDescriptor.value + " \r\nwritable:" + oDescriptor.writable + "\r\n enumberable:" + oDescriptor.enumerable + "\r\n configurable:" + oDescriptor.configurable);
alert(o.z);
o.x = 4;
alert(o.z);
属性的修改遵循以下规则:
如果对象是不可扩展的,则尅编辑已有的自有属性,但不能给他添加新的属性。
如果对象是不可配置的,则不能修改他的可配置性和可枚举性。
如果存取器属性是不可配置的,则不能修改其getter和setter方法,也不能将他转换为数据属性。
如果数据属性是不可配置的,则不能将它转换为存取器属性。
如果数据属性是不可配置的,则不能将它的可写性从false修改为true,但可以从true 修改为false.
如果数据属性是不可配置的且不可写的,则不能修改它的值,然而可配置但不可写属性的值是可以修改的。(实际上是先将他标记为可写的,然后修改他的值,最后转换为不可写的。
summary
属性,还需要继续研究才行。。。
javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置的更多相关文章
- javaScript 工作必知(五) eval 的使用
eval eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行, 改变全局变量的值: var x = 2; //定义的全局变量 alert(x); ...
- javaScript 工作必知(三) String .的方法从何而来?
String 我们知道javascript 包括:number,string,boolean,null,undefined 基本类型和Object 类型. 在我的认知中,方法属性应该是对象才可以具有的 ...
- JavaScript 工作必知(九)function 说起 闭包问题
大纲 Function Caller 返回函数调用者 Callee 调用自身 作用域 闭包 function 函数格式 function getPrototyNames(o,/*optional*/ ...
- javaScript 工作必知(六) delete in instanceof
in in 判断 左边 的字符串或者能转换成字符串的是否属于 右边 的属性. var data = { x: 1, y: 4 };//定义了直接对象 alert("x" in d ...
- javaScript 工作必知(七) 对象继承
对象继承inherit var o = { r: 1 }; var c = function f() { }; c.prototype = o; c.r = 3; alert(o.r);//被继承的属 ...
- javascript 工作必知(四) 类型转换
string和number boolean javascript 类型会根据赋值的进行转成相应的类型. var str = ""; alert(typeof (str));//st ...
- javaScript 工作必知(二) null 和undefined
null null 表示个“空” , 使用typeof (null) ;//Object ; 说明他是一个特殊的对象. null 类型只自己唯一个成员.他是不包含属性和方法的. undefined u ...
- javaScript 工作必知(十一) 数组常用方法实现
大纲 Array join reverse反转 sort排序 concat 拼接 slice splice 数组 //定义数组 var a = []; //使用Array定义一个数组, var a1 ...
- javaScript 工作必知(十) call apply bind
call 每个func 都会继承call apply等方法. function print(mesage) { console.log(mesage); return mesage; } print ...
随机推荐
- lamp apache配置虚拟主机
You don't have permission to access /index.php on this server
- leetcode 326. Power of Three(不用循环或递归)
leetcode 326. Power of Three(不用循环或递归) Given an integer, write a function to determine if it is a pow ...
- POJ 1724 最短路费用限制
迪杰斯塔拉裸题 最大花费 n个点 m条有向边 起点终点 路径长度 路径花费 问:在花费限制下,最短路径的长度 #include <iostream> #include <string ...
- Tree(prime)
Tree Time Limit : 6000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- c# 校验文本框的正则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #region ...
- UVA 1153 KEEP THE CUSTOMER SATISFIED
题意: 钢铁公司有N个客户的订单,每个订单有一个产量q(生产时间刚好也等于q)和订单完成截止时间.公司要求完成尽量多的订单. 分析: 先按截止时间d排序,然后维护一个已经选好的订单的优先队列,如果当前 ...
- asp.net生成缩略图、文字图片水印
/// <summary> /// 会产生graphics异常的PixelFormat /// </summary> private static PixelFormat[] ...
- 将项目上传到bitbucket仓库
先将项目添加git仓库中(本地) 成功后上门会有上传和下载按钮 提交代码:
- Ext.grid.GridPanel的属性
1.Ext.grid.GridPanel 主要配置项: store:表格的数据集 columns:表格列模式的配置数组,可自动创建ColumnModel列模 ...
- HDU 1037 - Keep on Truckin'
没啥可说的... #include <iostream> using namespace std; ; int a,b,c; int main() { while(cin>>a ...