constructor&object

constructor&object 的联系与区别

 

构造函数与对象

构造函数是类中的特殊成员函数,用于为对象分配内存。它可用于为数据成员提供值。创建对象时将调用构造函数。它与类具有相同的名称。构造函数不返回任何值。

 

Constructor:是用于创建和初始化类中创建的一种特殊方法。constructor属性返回对创建此对象的数组函数的引用。 

 语法

object.constructor

constructor([arguments])

   { ... }

派生类构造函数:

Constructor(.....args){

  Super(...args);

}

 

在一个类中只能有一个名为 “constructor” 的特殊方法。 一个类中出现多次构造函数 (constructor)方法将会抛出一个 SyntaxError 错误。

在一个构造方法中可以使用super关键字来调用一个父类的构造方法。

如果没有显式指定构造方法,则会添加默认的 constructor 方法。

如果不指定一个构造函数(constructor)方法, 则使用一个默认的构造函数(constructor)。

<script type="text/javascript">

var test=new Array();

if (test.constructor==Array)

{

  document.write("This is an Array");

}

if (test.constructor==Boolean)

{

  document.write("This is a Boolean");

}

if (test.constructor==Date)

{

  document.write("This is a Date");

}

if (test.constructor==String)

{

  document.write("This is a String");

}

</script>

输出:

This is an Array

Object:

Object对象,是所有JavaScript对象的超类(基类)。Object.prototype(Obecjt的原型)定义了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);         // true

(3)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) }

}}

 

posted on 2018-11-12 17:48  psyqqan  阅读(126)  评论(0编辑  收藏  举报