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 分钟前
【C语言】数组
c语言·开发语言·算法
FRing035 分钟前
JavaScript入门到精通三十三(异常处理、call方法、apply方法、bind方法、防抖、节流)
开发语言·前端·javascript
geovindu11 分钟前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
纪念 2291 小时前
C++ 算法(模拟)
开发语言·c++·算法
niucloud-admin1 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:评价列表
开发语言·php
jktantan1 小时前
(二)Vue 3 的 attrs 不是响应式:el-form 扩展属性同步的三种方案
前端·javascript·vue.js·element-plus
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
gz927cool2 小时前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
CoderYanger2 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
AIFQuant2 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发