JavaScript 的 new会发生什么

  1. 创建空对象;

    var obj = {};

  2. 设置新对象的constructor属性为构造函数的名称,设置新对象的proto 属性指向构造函数的prototype对象;

    obj.proto = ClassA.prototype;

    扩展了新对象的原型链。

  3. 使用新对象调用函数,函数中的this被指向新实例对象:

    ClassA.call(obj);  //{}.构造函数();

  4. 返回this指针。当存在显示的返回时,返回return后面的内容。新建的空对象作废。

javascript 复制代码
//创建了一个空对象obj;
var obj  = {};

//将这个空对象的__proto__成员指向了F函数对象prototype成员对象
obj.__proto__ = F.prototype;

//将F函数对象的this指针替换成obj,然后再调用F函数
F.call(obj);
javascript 复制代码
function test() {
	this.name = 'test';
}
test.prototype = {
	a: {},
	b: {}
};

var c = new test();
相关推荐
少控科技2 小时前
QT进阶日记004
开发语言·qt
狗都不学爬虫_2 小时前
JS逆向 - 最新版某某安全中心滑块验证(wasm设备指纹)
javascript·爬虫·python·网络爬虫·wasm
阿杰 AJie2 小时前
Lambda 表达式大全
开发语言·windows·python
格鸰爱童话2 小时前
python基础总结
开发语言·python
Jiangnan_Cai2 小时前
【Electron】Windows 下打包遇到 dist/unpacked 文件内 electron.exe 文件缺失问题
前端·javascript·electron
自不量力的A同学2 小时前
Electron 40.0.0 发布,跨平台桌面应用开发工具
前端·javascript·electron
叁散2 小时前
实验项目4 光电式传感器原理与应用(基于Matlab)
开发语言·matlab
先做个垃圾出来………2 小时前
Python try-except-else 语句详解
开发语言·python
进击的小头2 小时前
为什么C语言也需要设计模式
c语言·开发语言·设计模式