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();
相关推荐
mONESY38 分钟前
JavaScript 栈、队列、数组与链表核心知识点总结
javascript·面试
huangdong_1 小时前
1688商品图片采集技术解析:登录态处理与SKU图自动分类
开发语言
ZengLiangYi1 小时前
TypeScript 项目配置:tsconfig、ESM、路径别名
javascript·typescript·aigc
chase_my_dream1 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
晓13131 小时前
【Cocos Creator 3.x】篇——第二章 入门
前端·javascript·游戏引擎
想要成为糕糕手1 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
xiaofeichaichai2 小时前
React Hooks
前端·javascript·react.js
数据知道2 小时前
C++ 层拦截:修改 Blink 引擎与 V8 绑定的底层逻辑
javascript·数据采集·指纹浏览器·风控
天佑木枫2 小时前
15天Python入门系列 · 序
开发语言·python