标准库之Object对象

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的实例方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值