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

属性,还需要继续研究才行。。。

时间: 2024-08-03 13:30:43

javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置的相关文章

javaScript 工作必知(五) eval 的使用

eval eval(parse) parse :里面跟参数字符串,我们知道执行javascript 会编译执行,    改变全局变量的值: var x = 2; //定义的全局变量 alert(x);//2 var g = eval("x=3"); //eval 会根据当前上下文解析x alert(x);//3    在全局作用域引用eval,改变全局作用域的值,不改变局部作用域的值 var g = eval; //全局引用eval var x = "global"

javaScript 工作必知(六) delete in instanceof

in in 判断  左边 的字符串或者能转换成字符串的是否属于 右边 的属性. var data = { x: 1, y: 4 };//定义了直接对象 alert("x" in data);//true ,x 是data 的一个属性 alert(1 in data);//false ,1 是data的属性值. var arr = [4, 5, 7];//定义了直接数组对象 alert(0 in arr);//true ,arr 数组的index包括0,1,2,0 是他的一个[0]属性.

javaScript 工作必知(三) String .的方法从何而来?

String 我们知道javascript 包括:number,string,boolean,null,undefined 基本类型和Object 类型. 在我的认知中,方法属性应该是对象才可以具有的. var str="hello,world"; var s=str.subString(1,4);//ell alert(typeof(str)+":"+typeof(s));//string:string           从上面的返回类型来看,str是strin

javascript 工作必知(四) 类型转换

string和number boolean javascript 类型会根据赋值的进行转成相应的类型. var str = ""; alert(typeof (str));//string str = 5; alert(typeof (str));//number var sum = str + 5; //+编程两个数字相加 alert(sum);//10       这一种比较明显,一眼就可以计算出其值.但是请看下面这种转换 var sum = "7" + &qu

javaScript 工作必知(七) 对象继承

对象继承inherit var o = { r: 1 }; var c = function f() { }; c.prototype = o; c.r = 3; alert(o.r);//被继承的属性值未发生改变. alert(c.r);//c中r覆盖了o中的属性.     如何调用o中的r属性呢. var o = { r: 1 }; var c = function f() { }; c.prototype = o; alert(o.r);//1 被继承的属性值未发生改变. alert(c.

javaScript 工作必知(二) null 和undefined

null null 表示个“空” , 使用typeof (null) ;//Object ; 说明他是一个特殊的对象. null 类型只自己唯一个成员.他是不包含属性和方法的. undefined undefined 同样也是表示"空", 使用typeof (undefined) ;//undefined ;说明他是undefined类型的. undefined 类型只包含自己一个成员,他不包含属性和方法的. summary null 和 undefined 在莫种意义上可以一样 ,比

javaScript 工作必知(十) call apply bind

call  每个func 都会继承call apply等方法. function print(mesage) { console.log(mesage); return mesage; } print.call(this, "cnblogs");//cnblogs call(thisAgr,agr1,agr2...) ,call方法第一个传递一个context上下文.后面是参数的个数. apply apply(thisAgr,[agr1,agr2]),apply方法和call的用法一样

JavaScript 工作必知(九)function 实参和形参

大纲 Function Caller 返回函数调用者 Callee 调用自身 function 函数格式 function getPrototyNames(o,/*optional*/ a) { a = a || []; for(var p in o) { a.push(p); } return a; } caller func.caller 返回函数调用者 function callfunc() { if(callfunc.caller) { alert(callfunc.caller.toS

js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法

获取所有参数 function test(){ for(var i=0;i<arguments.length;i++)  document.write(arguments[i]); } 遍历某个对象所有的属性名称和值的方法 <script language="javascript"> var obj = new Object(); obj.myname = "我是对象"; obj.pro2 = "23"; obj.pro3 =