Javascript Object方法详解

Object.create(o)

创建对象

Object.create({x: 1}) //创建一个普通对象Object.create(null) //创建一个没有原型的新对象, 不继承任何属性和方法

Object.keys(o)

返回对象中可枚举的自我属性的名称的数组

Object.getOwnPropertyNames(o)

返回对象中所有自我属性的名称的数组

属性的特性

属性有两种特性, 数据属性和存取器属性
数据属性: {value: , writable, enumerable, configurable}
存取器属性: {get: , set, enumerable, configurable}

Object.getOwnPropertyDescriptor(o, prop)

可以获得某个对象特定自有属性的属性描述符

Object.getOwnPropertyDescriptor({x:1}, "x")==>Object {value: 1, writable: true, enumerable: true, configurable: true}

若想要获取继承属性的属性描述符, 需要遍历原型链(Object.getProtytypeOf())

Object.defineProperty

Object.defineProperty({}, "x", {                            value: 1, //值                            writable: true,                                enumerable: true,                            configurable: true                        }Object.defineProperty({}, {    x: { value: 1, writable: true, enumerable: true, configurable: true},    x: { value: 2, writable: true, enumerable: true, configurable: true},    r: {        get: function() { return Math.max(this.x, this.y)},        enumerable: true,         configurable: true    }})

configuration = false 时为 不可配置
如果存取器属性是不可配置的, 则不能修改get和set, 也不能转换为数据属性
如果数据属性是不可配置的, 则不能转换为存取器属性
如果数据属性是不可配置的, 则不能将writable从false->true, 但是可以从true->false
如果数据属性是不可配置且为可写时, 则不能修改它的值, 然而可配置但不可写时, 值是可以修改的(实际上是先把可写性转成true, 修改值后, 再改为false)

完整复制属性特性的extend方法

Object.defineProperty(Object.prototype,    "extend",    {        writable: true,        enumerable: false,        configurable: true,        value: function(o){            //获取所有可枚举的自有属性            var names = Object.getOwnPropertyNames(o);            for(var i = 0; i __proto__查询, IE和Opera不支持### Object.esExtensible(o)判断对象是否是可扩展的### Object.preventExtensions(o)把对象转为不可扩展的### Object.seal(o)在preventExtensions的基础上, 将所有自有属性设置为不可配置的,即不能添加新属性, 且不能改已有属性, 可以用Object.isSealed来检测### Object.freeze(o)对象冻结, 在seal的基础上, 将自有的所有数据属性设置为只读, 可以用Object.isFrozen()来检测## Object.prototype一般只有function对象拥有prototype属性__proto__是原型链的实际指针

// 原型链的顶端
log((Object.prototype).proto); // null
log(Function.prototype.proto == Object.prototype); // true
log(Object.proto == Function.prototype); // true
log(Function.proto == Function.prototype); // true
log(Array.proto == Function.prototype); // true
log(Company.proto == Function.prototype); // true
log(Object.proto == Function.prototype); // true
log(Company.prototype.proto == Object.prototype); // true
log(c1.proto == Company.prototype); // true

数据摘自 http://2660311.blog.51cto.com/2650311/1358226/

### hasOwnProperty用来检测给定的名字是否是对象的自有属性, 对于继承的属性将返回false.

var o = {x: 1}
o.hasOwnProperty("x") // true: o有个自有属性x
o.hasOwnProperty("y") // false: o中不存在属性y
o.hasOwnProperty("toString") // false: toString是继承属性

**in** 可以区分不存在的属性和存在但值为undefined的属性

var o = {x: undefined}
"x" in o // true, 属性存在
"y" in o //false, 属性不存在
delete o.x;
"x" in o //false, 已删除, 不存在

### propertyIsEnumerable是hasOwnProperty的增加版, 只有检测到是自有属性且可枚举(enumerable==true)时才返回true

var o = {x: 1}
o.propertyIsEnumerable("x") //true
Object.prototype.propertyIsEnumerable("toString") //false, 不可枚举

### toString和toLocalString通常来说, toLocalString会直接调用toString的值返回, 除了特殊的几个对象外: Date, Number 会做本地化的转换Array, Array在做toLocalString的时候会调每个元素的toLocalString, 而非toString### valueOfvalueOf和toString方法非常类似, 只有当需要转换成对象的某种原始值, 而非字符串时才会调用, 尤其是在Date和Number.本文以学习为主, 主要资源来自于>#JavaScript#

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部