1. Constructor:是用于创建和初始化类中创建的一个对象的一种特殊方法。

constructor([arguments]){ ... }

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

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

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

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

实例:

class Square extends Polygon {constructor(length) {// 在这里, 它调用了父类的构造函数, 并将 lengths 提供给 Polygon 的"width"和"height"
        super(length, length);// 注意: 在派生类中, 必须先调用 super() 才能使用 "this"。// 忽略这个,将会导致一个引用错误。this.name = 'Square';}get area() {return this.height * this.width;}set area(value) {// 注意:不可使用 this.area = value// 否则会导致循环call setter方法导致爆栈this._area = value;}
}

class Polygon {constructor() {this.name = "Polygon";}
}class Square extends Polygon {constructor() {super();}
}class Rectangle {}Object.setPrototypeOf(Square.prototype, Rectangle.prototype);console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true

let newInstance = new Square();
console.log(newInstance.name); //Polygon

这里,Square类的原型被改变,但是在正在创建一个新的正方形实例时,仍然调用前一个基类Polygon的构造函数。

如果不指定构造方法,则使用默认构造函数。对于基类,默认构造函数是:

constructor() {}

对于派生类,默认构造函数是:

constructor(...args) {super(...args);
}

2. Object:

(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([], []);           // falsevar 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) }
}})// 创建一个以另一个空对象为原型,且拥有一个属性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 } });

 

转载于:https://www.cnblogs.com/liuwei-0313/p/9912005.html

Constructor vs Object相关推荐

  1. 详解Javascript中的Object对象

    本文地址:http://luopq.com/2016/02/28/Object-in-Javascript/,转载请注明 Object是在javascript中一个被我们经常使用的类型,而且JS中的所 ...

  2. JavaScript Object对象

    原文:JavaScript Object对象 Object对象 1. 介绍 Object对象,是所有JavaScript对象的超类(基类).Object.prototype(Obecjt的原型)定义了 ...

  3. Object Builder Application Block (2)

    三.ObjectBuilder Application Block ObjectBuilder一开始出现于Microsoft所提出的Composite UI Application Block,主司对 ...

  4. js map 只输出key_什么时候适合使用Map而不是Object

    「Map」映射是一种经典的数据结构类型,其中数据以 「key/value」 的键值对形式存在 Map 默认值:默认不包含任何值,只包含显式插入的键 类型:任意 长度:键值对个数通过 size 属性获取 ...

  5. 数据类型的判断 --Object.prototype.toString.call(obj)精准检测对象类型

    数据类型的判断 typeof typeof返回一个表示数据类型的字符串,返回结果包括:number.boolean.string.symbol.object.undefined.function等7种 ...

  6. 反射_Class对象功能_获取Constructor

    * Constructor:构造方法     * 创建对象:         * T newInstance(Object... initargs) * 如果使用空参数构造方法创建对象,操作可以简化: ...

  7. JavaScript学习笔记(四)--复杂数据类型Object

    Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...

  8. [译] Object.assign 和 Object Spread 之争, 用谁?

    原文链接 thecodebarbarian.com/object-assi- 在 2018 年 Object Rest/Spread Proposal 达到了 stage 4,这意味着在未来它会将入到 ...

  9. java中typeof_深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)...

    关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和  instanceof,却很少有人知道 constructor,以及constructor与前面二 ...

最新文章

  1. shell 脚本简单入门
  2. Inversion Sequence(csu 1555)
  3. c语言申请字符串动态,【分享】C语言动态长度字符串
  4. 自然语言处理中的符号表征
  5. linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统
  6. 性能测试之性能测试的基础理论
  7. 2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
  8. 2021牛客寒假算法基础集训营2,签到题FHIJ
  9. JFFS2 文件系统及新特性介绍
  10. matlab仿真高尔顿正态分布源码,《正态分布》教学设计
  11. 巧除Word插入水印后页眉处的折线(转)
  12. Vue的一些知识汇总---希望对你有用
  13. vue3中播放视频和m3u8后缀的视频解决办法
  14. otsu天空分割 matlab,matlab图像处理--Otsu阈值分割
  15. Arduino学习总结(未完待续)
  16. 数据库系统结构、数据库系统的组成
  17. 快钱提现 php,快钱账户提现付款操作手册
  18. 微信小程序体验版ios白屏 安卓报错 {“errMsg“:“hideLoading:fail:toast can‘t be found“}
  19. Failed to resolve directive: XXX
  20. infocom 2020 整理

热门文章

  1. 服务器配置能连多少个小程序,每个服务器能配置多少小程序
  2. u8 api开发报类型不匹配错误_小程序云开发入门学习,小程序支付功能常见错误汇总及解决方案...
  3. python 如何快速判断列表是否相同_python如何判断两个list是否相等
  4. HTML学习思维导图
  5. Spring Cloud with Turbine
  6. vSphere5.1升级5.5(二)——升级Esxi主机及vmware tools
  7. java:输出流程printStream
  8. 以后再别这样做,否则你的苹果华为将挂在墙上
  9. 两个栈实现队列+两个队列实现栈----java
  10. 45.国际化-选择使用资源文件