JS原生提供Object对象,它的原生方法分为两类:Object本身的方法与Object的实例方法.
Object既可以当做普通方法用 Object(vars)目的是把vars转换为对象
转换规则:如果参数是对象则原样返回,如果是原始类型,则转换为各自对应的包装对象.
也可以当做构造方法使用 new Object();来生成新对象.用法与上面的普通方法调用相同.只不过语义不一样:
Object(value) 表示将 value 转成一个对象,而 new Object(value)表示新生成一个对象,这个新对象===value.
1.Object对象本身的方法
直接定义在Object中,
Object.print = function(o){console.log(o)}
Object.keys();
Object.getOwnPropertyNames();
//一般来说上面两个方法都是返回自身属性名组成的数组
//只有涉及到不可枚举属性时,才用getOwnPropertyNames去获取不可枚举属性.
Object.getOwnPropertyDescriptor();//获取属性的描述对象
Object.defineProperty();
Object.defineProperties();
Object.preventExtensions();//防止对象扩展
Object.isExtensiable();
Object.seal();//禁止对象配置
Object.freeze();//冻结对象
Object.isSealed();
Object.isFrozen();
Object.create();//指定原型对象和属性,返回一个新对象
Object.getPrototypeOf();//获取对象的Prototype对象
Object.prototype.print = function(){console.log(this)}
let obj = new Object();
obj.print()//
Object.prototype.valueOf();
Object.prototype.toString();
Object.prototype.toLocaleString();
Object.prototype.hasOwnProperty();//判断属性是否为自身属性
Object.prototype.isPrototypeOf();
Object.prototype.propertyIsEnumerable();
{
value:123,
writable:false,
enumerable:true,
configurable:fale,
get:undefined,
set:undefined
}
var obj={
$n:5,
get next(){return this.$n}
set next(n){
if(n>=this.$n)
this.$n = n;
else
throw new Error('new value should bigger than old value');
}
}
obj.next//5
obj.next=10;
var extend = function (to ,from){
for(var property in from){
to[property] = from[property]
}
return to ;
}
extend({},{a:1})//{a:1}
var extend = function (to ,from){
for(var pro in from){
if(!from.hasOwnProperty(pro)) continue;
Object.defineProperty(
to,
pro,
Object.getOwnPropertyDescriptor(from,pro)
);
}
return to;
}
同时,如果把对象的原型取出来,一样可以增加新属性.
以上三种方法只是对对象进行浅锁定,或者说如果对象中的属性值还是对象的话,只能锁定对应的指向,属性值指向的对象本身还是可以被改变的.
禁止对象添加新属性,同时禁止对象删除已有属性,也不允许修改属性值;
Object.freeze(obj);
相当于把属性描述对象中的configureable设置为false;
禁止对象添加新属性,同时禁止对象删除已有属性,但是属性值可以被修改;
Object.seal(obj);
禁止对象添加新的属性;
Object.preventExtension(obj);
5 对象的锁定
为了解决这个问题,可以通过 Object.defineProperty方法来拷贝属性.
上面方法的问题在于,如果遇到存取器属性,只会对相应的属性值进行拷贝
一般来说
4 对象的拷贝
存取器,往往用于 属性值依赖对象内部数据的场合
Object.getOwnPropertyDescriptor(obj,'valueName'');
是Js提供的内部数据结构,用来描述对象的属性,控制属性的行为
3 属性描述符对象
就是定义在Object原型对象Object.prototype上的方法,可以被Object实例直接使用
2.Object的实例方法
本文深入解析JavaScript中的Object对象,包括其原生方法、实例方法及如何使用Object进行对象创建与属性管理。探讨了Object的构造与普通调用的区别,以及如何通过Object的方法实现对象属性的读取、设置和锁定。
2934

被折叠的 条评论
为什么被折叠?



