new 命令的原理[通俗易懂]

new 命令的原理[通俗易懂]new 命令的原理

大家好,又见面了,我是你们的朋友全栈君。

前言

之前一直没完全弄清楚js原型链和继承,有时候是自己的理解,有时候靠死记;最近要回头看看js的基础,顺便记录一些内容。摘抄于阮一峰大神;如果想好好复习一下js基础内容,戳这里https://wangdoc.com/javascrip…

使用new命令时,它后面的函数依次执行下面的步骤。

1.创建一个空对象,作为将要返回的对象实例.
2.将这个空对象的原型,指向构造函数的prototype属性。
3.将这个空对象赋值给函数内部的this关键字。
4.开始执行构造函数内部的代码

也就是说,构造函数内部,this指的是一个新生成的空对象,所有针对this的操作,都会发生在这个空对象上。构造函数之所以叫“构造函数”,就是说这个函数的目的,就是操作一个空对象(即this对象),将其“构造”为需要的样子。

如果构造函数内部有return语句,而且return后面跟着一个对象,new命令会返回return语句指定的对象;否则,就会不管return语句,返回this对象。

var Vehicle = function () {
  this.price = 1000;
  return 1000;
};

(new Vehicle()) === 1000
// false

new命令简化的内部流程,可以用下面的代码表示。

function _new(/* 构造函数 */ constructor, /* 构造函数参数 */ params) {
  // 将 arguments 对象转为数组
  var args = [].slice.call(arguments);
  // 取出构造函数
  var constructor = args.shift();
  // 创建一个空对象,继承构造函数的 prototype 属性
  var context = Object.create(constructor.prototype);
  // 执行构造函数
  var result = constructor.apply(context, args);
  // 如果返回结果是对象,就直接返回,否则返回 context 对象
  return (typeof result === 'object' && result != null) ? result : context;
}

// 实例
var actor = _new(Person, '张三', 28);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107179.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 校花网爬取校花照片

    校花网爬取校花照片"""今天我们开始尝试,第一次学习爬虫的第一个案例,去校花网上爬取一些校花的照片"""fromrequests_htmlimportH

    2022年7月3日
    24
  • 测试用例等价类和边界值_等价类划分和边界值的区别与联系

    测试用例等价类和边界值_等价类划分和边界值的区别与联系一、测试用例/案例(testcase/testinstance)  1、定义:是在测试执行之前,由测试人员编写的指导测试过程的重要文档,主要包括:用例编号、测试目的、测试步骤(用例描述),预期结果  2、介绍编写测试用例的7种方法:    1)等价类划分法()    2)边界值法()    3)因果图法    4)判定表法    5)正交排列法    6)测试大纲法    7)场景法(*****)  至少要掌握每种方法的适用场合(用在哪)和使用步骤(怎么用)  编写测试用例可以参考

    2022年10月10日
    3
  • 关于 Goby 红队专版获取指南!

    关于 Goby 红队专版获取指南!自红队专版发布以来 受到大家热情的关注 申请人数大大大超出了我们的预期 为避免 Goby 沦为黑客非法用途工具 我们选择有限制的小范围开放红队专版 对于没有及时处理与回复 深感歉意 关于新一轮 License 发放 现经过短时间审视及复盘 重新完善了申请流程 详情往下看 0 01 获取渠道 1 授权红队授权红队为参加某演练活动方 为确保 Goby 用于合法使用 需提供您的相关证明 1 提供 加盖公司公章的承诺函 模板下载 相关的授权证明 如邀请函 授权函 通知 2 名额 每个单位

    2025年8月11日
    2
  • android插件化资源_android 插件化

    android插件化资源_android 插件化AndroidEagleEye是一个基于Xposed的应用,可以实现对Android系统API与应用自身方法的Hook,最终会将Hook的API或方法的信息以Log的形式输出,包括应用的uid、API或方法的名称、参数信息等。在使用AndroidEagleEye过程中对设备造成的任何风险自负特色可实现对Android系统API以及应用自身方法的Hook可根据配置

    2022年8月16日
    7
  • 页面的高度设置_word页面高度在哪设置

    页面的高度设置_word页面高度在哪设置问题1:页面加上doctype后height=100%不好使解决:增加css设置:html{height:100%}body{height:100%};另外,其他的容器也需要设置height

    2022年8月1日
    12
  • MySql修改表名的两种方法

    MySql修改表名的两种方法一、renamerenametable旧表名to新表名;renametablemysutonew_su;二、alteraltertable旧表名rename[as]新表名altertablemysurenameasnew_su;

    2022年6月1日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号