为什么创建一个名为“构造器”的键似乎改变了“这”的行为

Why does creating a key called "constructor" seem to change the behavior of "this"?

本文关键字:构造器 改变 创建 一个 为什么      更新时间:2023-09-26

为什么创建一个名为"constructor"的键似乎改变了"this"的行为?以以下代码为例:

var O = {
  constructor: function f1(){},
  k2: function f2(){return this;}
};
console.log(O.k2());//logs "f1"

有人会认为"this"应该是"Object",因为它在对象文字中,但是如果我使用"constructor"这个名字作为键,它里面的函数突然变成了"this"。如果我试一下,我得到'Object':

var O = {
  k1: function f1(){},
  k2: function f2(){return this;}
};
console.log(O.k2());//logs "Object"

键名"constructor"是否具有类似于_ proto _和_ prototype的特殊行为?老实说,我不明白为什么"this"在这里附加到函数f1上。

是的,constructor是创建原型的函数。参考。