javascript new操作符学习

chat

使用new调用构造函数实际上会经历以下 4个步骤:
(1) 创建一个新对象;
(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;
(3) 执行构造函数中的代码(为这个新对象添加属性) ;
(4) 返回新对象。

var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的proto成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”,关于call函数的用法。



new一个对象发生了什么:

(我的 简单理解)
function NEW_OBJECT(Foo){
var this={};// 隐式 定义this 为一个对象
this.__proto__=Foo.prototype;//this对象中 不是空的 ,默认 有一个 __proto__ 指向  构造函数的原型
this.__proto__.constructor=NEW_OBJECT;// 还会在 __proto__ 中 定义 constructor属性为 当前的构造函数

    //上方的this 的创建 更精准的写法: Object.create(NEW_OBJECT.prototype);

return this;//隐式 的 返回 这个  this ,从而将  this  指向了  构造出的  对象实例

}

模拟一个new的实现:

function NEW_OBJECT(Foo){
var obj={};
obj.__proto__=Foo.prototype;
obj.__proto__.constructor=Foo;
Foo.apply(obj,arguments)
return obj;

}

版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/1308/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
javascript new操作符学习
new一个对象 原型链学习
<<上一篇
下一篇>>
chat