美文网首页
new 运算符实现细节

new 运算符实现细节

作者: yyyzhen | 来源:发表于2017-11-16 19:36 被阅读0次
function Person(name) {
    this.name = name;
}
Person.prototype.getName = function() {
    return this.name
}
var a = new Psrson('sven')
console.log(a.name)  // 'sven'
console.log(a.getName())  //  'sven'
console.log(Object.getPrototypeOf(a) === Person.prototype)  // true
console.log(a)

由上面这个例子可以知道new在执行时做了哪些事情:

  • 创建一个新对象
  • 将传入的参数变为了新对象的属性,这是构造函数内部的具体实现决定的
  • 让新对象的原型指向构造函数的prototype属性(构造函数的prototype的constructor属性默认指向构造函数本身)
  • 返回一个对象
    所以根据上面这几条,我们可以模拟一下new的实现过程:
  function Person(name) {
    this.name = name;
  }

  Person.prototype.getName = function() {
    return this.name;
  }

  var objectFactory = function() {
    var obj = new Object(),
      Constructor = [].shift.call(arguments);
    obj.__proto__ = Constructor.prototype;
    var ret = Constructor.apply(obj, arguments);
    return typeof ret === 'object' ? ret : obj;
  }
  var a = objectFactory(Person, 'sven')

  console.log(a.name)
  console.log(a.getName())
  console.log(Object.getPrototypeOf(a) === Person.prototype)
console.log(a)

可以看出,上下两个并没有什么区别

相关文章

  • new 运算符实现细节

    由上面这个例子可以知道new在执行时做了哪些事情: 创建一个新对象 将传入的参数变为了新对象的属性,这是构造函数内...

  • js中new操作符做了什么并实现自己的new操作符

    我们通过new运算符的使用,来探寻new操作符在执行的过程中究竟做了哪些操作,并且根据操作实现自己的new运算符。...

  • 实现 new 运算符

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 原理 MDN 对 new 解释的操...

  • Python:Python学习总结(三)

    魔法方法 对象构造相关:new、init、del。 运算符重载:所有运算符都能重载。 属性访问 集合实现 可调用对...

  • 模拟new的实现

    new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 模拟new之前,看看new实现了哪些...

  • 第四章 对象和数组

    Object类型 创建方法有两种,字面量和new运算符 1. 使用new运算符 let obj = new Obj...

  • 动态内存分配

    注:以下大部分内容来源于 coursera 课程《C++程序设计》 用new 运算符来实现动态内存分配 new运算...

  • 原型和原型链

    一、new 和 构造函数 1.1 new 运算符 new 运算符用来创建一个新的对象,其后面需紧跟一个函数,该函数...

  • new运算符的实现机制

    先来看一个例子,分别用新旧方式创建类,并实例化。 分别创建两个类的实例 首先,可以看输出结果。很明显两个实例的结构...

  • JS new 运算符源码实现

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作: 1...

网友评论

      本文标题:new 运算符实现细节

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