new对象

作者: xgszl33614 | 来源:发表于2016-05-03 14:46 被阅读24次

    对象new的流程

    当我们使用new关键字时,我们就创建了一个对象。比如new Date();

    那么,创建对象的流程是怎样呢?

    • 1.如同是用{}创建对象一样,js创建了一个类似的空对象。
    • 2.然后针对该对象调用指定的构造函数,这里就是Date了,构造函数的this即指向该空对象,构造函数给该对象添加了属性和方法。(构造函数一般不会有返回值)。这个新对象就是整个对象创建表达式的返回值。
      ——构造函数给对象添加属性和方法?那原型干什么,实例对象不是都继承了原型吗,原型没有对实例对象做点什么吗?创建实例对象时,实例对象的 [[Prototype]] 属性会指向构造函数的原型,所以是通过这种方式继承原型的。
    • 3.如果构造函数返回了一个对象呢,那么该对象为整个对象创建表达式的返回值。并且最初的{}对象废弃掉。(jquery对象就是用这种方式创建,我们使用jquery就不需要使用new jQuery了)。
      ——注意:此时创建的对象将不是该构造函数的实例。即:
    function A() {
        this.name = "abc";
        return {
            xingming:"bbc";
        }
    }
    var a = new A();
    a instanceof A;//false
    A.prototype.isPrototypeOf(a);//false
    

    new + function

    创建对象时new的肯定是构造函数了,是函数。
    创建对象时,会将对象的[[Prototype]]内置属性指向,构造函数的原型(prototype)。

    实际上:a instanceof b;判断a对象是否是b构造函数的实例 的内部过程是:判断a中 [[Prototype]] 所指向的是否是构造函数b的prototype(原型)。所以,类(采用其他oop语言的说法)的真实的唯一的标识是构造函数的原型。

    相关文章

      网友评论

          本文标题:new对象

          本文链接:https://www.haomeiwen.com/subject/wftrrttx.html