Better

Ethan的博客,欢迎访问交流

JavaScript之Object对象

哈哈,单独把Object拧出来写篇笔记是不是太过分了,有什么好讲的呢,确实没什么好讲的啦,不就是方法和属性么,但是由于他是最顶层的对象,且他确实提供很多实用的方法啦,我就写写,让自己有个印象噶。

构造函数

Object构造函数为给定值创建一个对象包装器。如果给定值是 null 或 undefined,将会创建并返回一个空对象,否则,将返回一个与给定值对应类型的对象。

当以非构造函数形式被调用时,Object 等同于 new Object()。

从上得知,Object构造函数是可以传参的,那么有哪些情形呢:

  • 参数是一个对象,那么将直接返回该对象。 造成的后果就是虽然该对象是new Object,但其constructor不一定是Object。
    var w = new Object(window), 
    var d = new Object(document), 
    var p = new Object(new Person());
    
  • 参数是基本类型对象,如字符串(String),数字(Number),布尔值(Boolean),将其包装成对象(转换成其对应的包装类)后返回。
    var s = new Object('hello'), 
    var n = new Object(22), 
    var b = new Object(true);
    

从以上看出,当传参数时,使用new Object生成的对象其构造器不一定指向Object,只有很巧的时候会指向Object,如:

var obj1 = new Object();
obj2 = {}; 
var o1 = new Object(obj1); 
var o2 = new Object(obj2);

静态方法

在JS中如此称呼挂载在构造函数对象上的方法不知道是否合适(Java的中带过来的),这种情况下可以不用实例化对象,也不需要借助原型便可以调用方法。常用的有哪些呢:

  • Object.assign(target, ...sources)
    • 复制sources的对象属性到target
    • 注意是extend(浅拷贝)而不是merge
  • Object.create(proto[, propertiesObject])
    • ECMAScript5中新增的,用来规范化原型式继承的。
    • 使用指定的原型对象和属性创建一个新对象。
// propertiesObject可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
var p = Object.create(Person.prototype,{age:{
    writable:true,// 默认false,true当且仅当与该属性相关联的值可以用赋值操作符改变时。
    configurable:true,// 默认false,true 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。
    enumerable:true,// 默认false,true 当且仅当在枚举相应对象上的属性时该属性显现。
    value: "hello" ,// 默认undefined,与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。注意:不能个get/set同时设置
    get: function() { return 10 },// 默认为 undefined,作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。
    set: function(value) { // 默认为 undefined,作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。
      console.log("Setting age to", value);
    }
}})
// 创建一个原型为null的空对象
var o = Object.create(null);
var o = {} =>
var o = Object.create(Object.prototype) =>
// 当然,如果在构造函数中有一些初始化代码,Object.create不能执行那些代码
var o = new Object()
  • Object.defineProperties(obj, props) 给对象添加一个属性并指定该属性的配置。
  • Object.entries(obj) 返回给定对象自身可枚举属性的[key, value]数组。
  • Object.getOwnPropertyDescriptor(obj, prop) 返回对象指定的属性配置。
  • Object.getOwnPropertyNames(obj) 返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名。
  • Object.getPrototypeOf(object) 返回指定对象的原型对象。
  • Object.keys(object) 返回一个包含所有给定对象自身可枚举属性名称的数组。
  • Object.values(object) 返回给定对象自身可枚举值的数组。

原型对象

JavaScript中的所有对象都来自Object;所有对象从Object.prototype继承方法和属性,尽管它们可能被覆盖。

属性:

  • Object.prototype.constructor
  • Object.prototype.__proto__

方法:

  • Object.prototype.hasOwnProperty(prop) 返回一个布尔值 ,表示某个对象是否含有指定的属性,而且此属性非原型链继承的。
  • Object.prototype.isPrototypeOf(object) 返回一个布尔值,表示指定的对象是否在本对象的原型链中。
  • Object.prototype.toString() 返回对象的字符串表示
  • Object.prototype.valueOf() 返回指定对象的原始值。

资料



留言