JavaScript"new"一个对象的过程

function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sayName = function() {
            return this.name;
        }
    }
    let per = new Person("sean", 26, "man");
    console.log(per.name);
new 操作做了什么?
  1. 创建一个空对象。
  2. 将空对象的proto指向构造函数的原型。
  3. 将构造函数的this对象指向新对象,这样新对象就可以访问构造函数中的属性和方法。
  4. 如果构造返回值是一个对象就返回该对象,否则返回新对象。
手动实现new
function newObj() {
    let obj = Object.create(null); //1.创建一个空对象
    let constructor = Array.prototype.shift.call(arguments); //获取构造函数
    obj.__proto__ = constructor.prototype; //2.将空对象的__proto__指向构造函数的原型
    let ret = constructor.apply(obj, arguments);//执行构造函数
    return typeof ret == 'object' ? ret : obj;//3.返回
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 6,490评论 0 6
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,206评论 0 5
  • JavaScript面向对象程序设计 本文会碰到的知识点:原型、原型链、函数对象、普通对象、继承 读完本文,可以学...
    moyi_gg阅读 4,136评论 0 2
  • JavaScript面向对象 面向过程强调的是功能行为,关注的是解决问题需要哪些步骤 面向对象是将功能封装进对象,...
    七分之二十四阅读 1,639评论 0 1
  • 亲情也好友情也罢, 又或者是撕心裂肺的爱情呀, 已经过去的失去的离去的就忘了吧…… 没办法,每天只有靠这个通知凑字...
    痴默阅读 3,047评论 4 19

友情链接更多精彩内容