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命令会经过以下几个步骤
用代码解释一下创建一个空对象,这个对象将会是new Person()返回的对象实例;
将这个空对象的原型指向构造函数的prototype属性;
将构造函数的this指向空对象,并运行构造函数;
判断构造函数返回的是不是对象,是的话返回默认对象,不是的话返回之前创建的空对象,没有返回值默认返回空对象
function Person(name, age) { this.name = name; this.age = age //return "小明" //如果返回的不是Object类型,将忽略这个return 返回之前创建的空对象 /* return { //如果返回的是Object类型,直接返回这个对象 "name" : "小花", "age" : 22 } */ } function _new(person, ...rest){ var obj = {}; // 创建一个空对象,这个对象将会是返回的对象实例 obj.__prototype__ = person.prototype; // 将这个空对象的原型指向person的prototype属性; //上述两步可以合为一步 : var obj = Object.create(person.prototype) var res = person.apply(obj, rest); // 将person的this指向空对象,并运行person函数,apply命令绑定this后就会运行person return (typeof res === "object" && res != null) ? res: obj; // 判断res返回的是不是对象,是的话返res,不是的话返回之前创建的obj,没有返回值默认返回obj } var xiaoming = _new(Person, "小明", 15) console.log(xiaoming .name); //小明 console.log(xiaoming .age); //15
本篇如能对您有所帮助,实在是感到荣幸。如有不合理之处也请大家多多指点。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98445.html
摘要:命令作用作用是执行构造函数,返回实例对象上面例子是自定义一个构造函数,其最大的特点就是首字母大写,用执行构造函数其中,在的执行下,代表了实例化后的对象,这个也就有属性注意点如果不用执行构造函数,那么指向的是全局有两种方式可以避免内部定义严格 new命令 new作用 作用是执行构造函数,返回实例对象 function F() { this.name = object } var ...
摘要:对语法树的扫描,同样提供了扫描器。词法分析过程如下图所示语法分析,即根据语法由序列生成抽象语法树,对应实现类为。生成的抽象语法树如下图所示的实现原理依赖开发的典型的第三方库有,代码自动生成的和,代码检查的和,编译阶段完成依赖注入的等。 原文:http://nullwy.me/2017/04/java...如果觉得我的文章对你有用,请随意赞赏 javac 是 Java 代码的编译器 [...
摘要:插件提供内容,负责渲染。增量更新,尽可能地减少重新渲染长时间运行的任务应该支持,并可以取消插件能够正确地处理对象的生命周期。使用了模式,运行可以将这个对象销毁。 使用 命令行使用 帮助:code --help 使用已经打开的窗口来打开文件:code -r 打开文件并滚动到特定行:code -r -g package.json:128 比较两个文件:code -r -d a.tx...
阅读 2066·2021-11-05 09:42
阅读 2805·2021-09-23 11:21
阅读 2802·2019-08-30 14:00
阅读 3269·2019-08-30 13:15
阅读 431·2019-08-29 17:18
阅读 3505·2019-08-29 16:29
阅读 2700·2019-08-29 14:06
阅读 2755·2019-08-23 14:41