js中构造函数使用new创建对象时,this与新建对象关系是怎样的?

发布于 2022-09-07 03:59:32 字数 966 浏览 33 评论 0

JavaScript高级程序设计(第3版)P144
其中(2)所表达的意思。与我的理解有所出入。
-------------------------------引用高程内容 start---------------------------------------
图片描述

英文解释
To create a new instance of Person, use the new operator. Calling a constructor in this manner
essentially causes the following four steps to be taken:

  1. Create a new object.
  2. Assign the this value of the constructor to the new object (so this points to the new object).
    PS:(将构造函数的this的值赋给新的对象)
  3. Execute the code inside the constructor (adds properties to the new object).
  4. Return the new object.

------------------------------引用高程内容 end--------------------------------------
关于使用new关键字调用构造函数的步骤,以下是我的理解。
(1).var newobj = {}; //首先创建一个新的临时对象
(2).newobj.call(newobj ); //在新对象的作用域中执行构造函数。
也就是将newobj赋给this。而书上说的正相反。“将构造函数的this的值赋给新的对象”。如何理解这句话?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚雾 2022-09-14 03:59:32

js执行的过程中,又不是所有的代码都是js实现的,书上讲的是底层实现。
你现在把new的过程用call解释了,那你用什么js代码去解释call的实现呢?


(1)在内存中开辟了一块区域。
(2)this指向这块区域地址。
(3)操作这个区域。
(4)返回这个区域地址。

叹沉浮 2022-09-14 03:59:32

new 操作符可以是这样模拟
function F(){}
function new(){

var obj = Object.create(F.prototype);
var ref = F.apply(obj, arguments);
if(Object(ref) === ref) {
    return ref
} else {
    return obj;
}

}
this 赋给 obj 或者是obj是赋给this ,其实他们都只是一个引用,表明他们指向同一个地方而已
可能你会想那究竟是哪个地址覆盖哪个地址,其实不存在这个情况,因为this是在运行时动态赋值的,
也就是说运行时this的值,就是obj的值,非运行时this是没有分配内存的,就谈不上谁赋给谁了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文