美文网首页
new Object()和object.create()

new Object()和object.create()

作者: LoveBugs_King | 来源:发表于2019-06-05 10:23 被阅读0次

    new Object()

    构造函数

    >function Person() {
      this.name = '小王'
      this.age = 25
    }
    >var p = new Person()
    

    构造函数执行的步骤:
    1、创建一个空对象p。

    var p = {}
    

    2、执行函数Person,并指定执行环境对应的this值为p。(执行完毕后环境会销毁)

    Person.call(p)
    

    3、p继承了构造函数Person()的原型

    p.__proto__ = Person.prototype
    

    4、执行构造函数内的代码

    普通函数

    >function person() {
      return {
        name: '小王',
        age: 28
      }
    }
    >var p =  person()
    

    来说说区别吧
    1、表面:调用方式,是否用new调用;函数名,首字母是否大写。
    2、this指向,构造函数的this指向新建的对象。普通函数的this指向全局环境。
    3、构造函数默认返回this,也就是实例对象;普通函数要设置return,否则是undefined。

    一个问题:如何知道我是普通函数还是构造函数?
    首先构造函数必须用用new xx(),那那么调用会生成一个新对象,可以在构造函数内执行:

    // 如果返回true的话,说明是构造函数,否则就是普通函数!
    this instanceof xx(构造函数名)
    

    object.create()

    Object.create =  function (o) {
        // 创造一个新匿名函数
        var F = function () {};
        // 给该匿名函数的原型指向o
        F.prototype = o;
        // 返回该匿名函数的实例
        return new F();
    };
    

    我们平时创造对象 :

    let a = {}
    let a = new Object({})
    

    区别:
    创造了一个Object数据结构的实例,Object.prototype上是有方法的。
    我们自己创建一个数据结构F,创造一个数据结构的实例f。f.proto会指向F.prototype。F.prototype.proto指向Function.peototype,Function.peototype.proto指向Object.prototype。
    所以我们把自己创建的数据结构的prototype指向我们自己定义的对象,可以切断原本原型链。

    相关文章

      网友评论

          本文标题:new Object()和object.create()

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