JavaScript new的运行过程
2024-10-12 09:40:23
参考 MDN网站的运算符
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:
1)创建一个空的简单JavaScript对象(即{});
2)链接该对象(即设置该对象的构造函数)到另一个对象 ;
3)将步骤1新创建的对象作为this的上下文 ;
4)如果该函数没有返回对象,则返回this。
复现代码如下:
<script type="text/javascript">
function Person(name,age){
this.name=name;
this.age=age;
//return this; }
Person.prototype.say=function(sth){
console.log('I Say:'+sth);
}; function _new(){
//创建一个简单的空对象
var obj={};
//获取构造函数
var _Constructor=arguments[0];
//链接到原型
obj=Object.create(_Constructor.prototype);//obj.__proto__=_Constructor.prototype;__proto__不推荐使用 见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/proto //获取构造函数的参数列表的值
var _args=Array.prototype.slice.call(arguments,1);
//将构造函数绑定到this值(result值)
var result = _Constructor.apply(obj,_args);
//判断构造函数是否return非构造函数this的值,若是非对象则忽略返回构造函数this值,若是对象则返回构造函数return的对象
return typeof result === "object" ? result : obj;//如果返回值是一个对象就返回该对象,否则返回构造函数的一个实例对象
};
var newPerson=new Person('orgin',1);
var _newPerson=_new(Person,'my',2); console.log(newPerson);
console.log(_newPerson); var newPerson2=new Person;
var _newPerson2=_new(Person);
console.log(newPerson2);
console.log(_newPerson2);
</script>
最新文章
- 个人作业-Week2
- CSS系列:CSS文字样式
- ubuntu安装pip3
- 使用Nginx解决IIS绑定域名导致应用程序重启的问题
- HTML5自学笔记[ 14 ]canvas绘图基础2
- HDU 4902 Nice boat (线段树)
- poj2752 水题
- Python(2.7.6) 特殊方法
- js在以div添加滚动条
- 百度云BAE3.0 的ssh构造(本机ssh项目迁移到BAE3.0)
- 20162311 实验三 敏捷开发与XP实践 实验报告
- python常见的函数和类方法
- pl/sql学习(4): 包package
- sass基础—属性嵌套以及跳出嵌套 @at-root
- VMware进入BIOS
- IntelliJ IDEA 运行 Maven 项目
- git 命令行下浏览器tig使用记录
- PHP扩展开发--编写一个helloWorld扩展
- 第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装
- TSNE数据降维学习【转载】