constructor 与 object

Posted hl345

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了constructor 与 object相关的知识,希望对你有一定的参考价值。

对象的constructor属性引用了该对象的构造函数.对于 Object 对象,该指针指向原始的 Object() 函数.如下

var obj = {};
obj.constructor    //? Object() { [native code] }
obj.constructor == Object    //true

var arr = [];
arr.constructor    //? Array() { [native code] }
arr.constructor == Array    //true

function Fun(){
    console.log(‘function‘);
}
var fun = new Fun();    //实例化
fun.constructor    //? Fun(){console.log(‘function‘)}    【打印出来的引用是Fun函数,说明fun的引用是Fun函数】
Fun.constructor    //? Function() { [native code] }      【打印出来的引用是Funcion函数,说明Fun的引用是Function函数】
fun.constructor == Fun    //true    【再次证明fun的constructor属性引用了fun对象的构造函数】
fun.constructor == Fun.constructor    //false
--------------------- 
 

constructor常用于判断未知对象的类型,如下:

function isArray (val){
    var isTrue = typeof val == ‘object‘ && val.constructor == Array;
    return isTrue?true:false;
}
var arr = isArray([1,2,3,4,5]);
console.log(arr);    //true
1
--------------------- 
作者:汪洋啊 
来源:CSDN 
原文:https://blog.csdn.net/wyangonly/article/details/79089881 
版权声明:本文为博主原创文章,转载请附上博文链接!

原文:https://blog.csdn.net/wyangonly/article/details/79089881 

Object:object是js自带的函数对象,可以有属性和方法。

在定义以后,不能在使用new创建对象实例,可以复制给其他变量,多个变量同时引用一个对象,或者克隆对象。具有多态性,无法继承,除非用复制的方式来实现

(1)Object.assign()

可以用作对象的复制

var obj = { a: 1 };

var copy = Object.assign({}, obj);

console.log(copy); // { a: 1 }

可以用作对象的合并 

var o1 = { a: 1 };

var o2 = { b: 2 };

var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);

console.log(obj); // { a: 1, b: 2, c: 3 }

console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。
2)Object.is() 

Object.is(‘haorooms‘, ‘haorooms‘);     // true

Object.is(window, window);   // true

Object.is(‘foo‘, ‘bar‘);     // false

Object.is([], []);           // false

var test = { a: 1 };

Object.is(test, test);       // true

Object.is(null, null);       // true

// 特例

Object.is(0, -0);            // false

Object.is(-0, -0);           // true

Object.is(NaN, 0/0);         // true3)Object.keys()

这个方法会返回一个由给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

/* 类数组对象 */

var obj = { 0 : "a", 1 : "b", 2 : "c"};

alert(Object.keys(obj));

// 弹出"0,1,2"

/* 具有随机键排序的数组类对象 */

var an_obj = { 100: ‘a‘, 2: ‘b‘, 7: ‘c‘ };

console.log(Object.keys(an_obj));

// console: [‘2‘, ‘7‘, ‘100‘]
4)Object.create() 

Object.create(proto, [ propertiesObject ])

第二个参数是可选的,主要用于指定我们创建的对象的一些属性,

例:ar o;

o = Object.create(Object.prototype, {

  // foo会成为所创建对象的数据属性

  foo: { writable:true, configurable:true, value: "hello" },

  // bar会成为所创建对象的访问器属性

  bar: {

    configurable: false,

    get: function() { return 10 },

    set: function(value) { console.log("Setting `o.bar` to", value) }

}})

 

// 创建一个以另一个空对象为原型,且拥有一个属性p的对象

o = Object.create({}, { p: { value: 42 } })

// 省略了的属性特性默认为false,所以属性p是不可写,不可枚举,不可配置的:

o.p = 24

o.p

//42

o.q = 12

for (var prop in o) {

   console.log(prop)

}

//"q"

delete o.p

//false

//创建一个可写的,可枚举的,可配置的属性p

o2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });

 



以上是关于constructor 与 object的主要内容,如果未能解决你的问题,请参考以下文章

面向对象object与constructor

JS中object与constructor的分析

constructor&object 的联系与对比

constructor&object 的联系与对比

constructor和object的联系与对比

constructor VS object