Object.create和new xxx()的区别

语法

Object.create(proto, [propertiesObject])

创建一个新对象,使用现有的对象来提供新创建的对象的__proto__

参数

proto

新创建对象的原型对象。

propertiesObject

可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。

返回值

一个新对象,带着指定的原型对象和属性。

例外

如果propertiesObject参数不是 null 或一个对象,则抛出一个 TypeError 异常。

var F = function () {};
    F.prototype = o;
    return new F();
};

new Base()

new 构造函数() 实际上执行的是:

var obj = new Object();
obj.[[Prototype]] = Base.prototype;
Base.call(obj)

原型链的理解

在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型.原型的值可以是一个对象,也可以是null.如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链。

访问一个对象的原型可以使用ES5中的Object.getPrototypeOf方法,或者ES6中的proto属性.

原型链的作用是用来实现继承,比如我们新建一个数组,数组的方法就是从数组的原型上继承而来的.

rang instanceof == Range

语法

object instanceof constructor

参数

 object

要检测的对象.

constructor

某个构造函数

instanceof运算符并不会检查rang是否是由Range()构造函数初始化而来,而会检查rang是否继承自Range.prototype。

分类: Javascript

发表评论