资讯专栏INFORMATION COLUMN

new 命令的原理

aikin / 454人阅读

摘要:创建一个空对象,作为将要返回的对象实例将这个空对象的原型,指向构造函数的属性。如果构造函数内部有语句,而且后面跟着一个对象,命令会返回语句指定的对象否则,就会不管语句,返回对象。

前言

之前一直没完全弄清楚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://www.ucloud.cn/yun/99569.html

相关文章

  • new命令原理

    function Person(name, age) { this.name = name; this.age = age } var person = new Person(小明, 18); console.log(person.name); //小明 console.log(person.age); //18 执行new命令会经过以下几个步骤 创建一个空对象,这个...

    Kyxy 评论0 收藏0
  • JavaScript学习之Object(下)new命令

    摘要:命令作用作用是执行构造函数,返回实例对象上面例子是自定义一个构造函数,其最大的特点就是首字母大写,用执行构造函数其中,在的执行下,代表了实例化后的对象,这个也就有属性注意点如果不用执行构造函数,那么指向的是全局有两种方式可以避免内部定义严格 new命令 new作用 作用是执行构造函数,返回实例对象 function F() { this.name = object } var ...

    Salamander 评论0 收藏0
  • Java 编译器 javac 笔记:javac API、注解处理 API 与 Lombok 原理

    摘要:对语法树的扫描,同样提供了扫描器。词法分析过程如下图所示语法分析,即根据语法由序列生成抽象语法树,对应实现类为。生成的抽象语法树如下图所示的实现原理依赖开发的典型的第三方库有,代码自动生成的和,代码检查的和,编译阶段完成依赖注入的等。 原文:http://nullwy.me/2017/04/java...如果觉得我的文章对你有用,请随意赞赏 javac 是 Java 代码的编译器 [...

    lookSomeone 评论0 收藏0
  • FE.BASE-vscode使用、原理、插件开发笔记

    摘要:插件提供内容,负责渲染。增量更新,尽可能地减少重新渲染长时间运行的任务应该支持,并可以取消插件能够正确地处理对象的生命周期。使用了模式,运行可以将这个对象销毁。 使用 命令行使用 帮助:code --help 使用已经打开的窗口来打开文件:code -r 打开文件并滚动到特定行:code -r -g package.json:128 比较两个文件:code -r -d a.tx...

    MingjunYang 评论0 收藏0

发表评论

0条评论

aikin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<