所以可以用一个匿名构造函数来创建一个匿名对象:new function() { ... }
我甚至查不到相关的说法,只看到有一个 stackoverflow 问题: https://stackoverflow.com/questions/40096704/new-function-vs-new-function
然后,会发生什么事情呢,调用了 bind()函数绑定了 this 值的函数也可以用一个新的空对象去调用,本来连 apply 和 call 都无法更改 this 值的:
function test() {
console.log('调用 test()函数, this 值是:', this);
}
test = test.bind({ a: 1 });
test();
new test();
真的太容易混淆了吧:
typeof Function
'function'
typeof function() {}
'function'
typeof new Function
'function'
typeof new function() {}
'object'
1
xiaoming1992 2022-09-02 19:26:33 +08:00 via Android
用 ts ,类型严格一些,应该就可以避免纠结这些东西了。我应该两三年没用过 call bind 了,this 也只在 class 里面使用。
|
2
chnwillliu 2022-09-02 19:43:52 +08:00 via Android
没有 class 的年代不都是这样么?你甚至可以在构造函数里 return 。
然而谁在项目里这样写会被拉出来打的。 |
3
SoloCompany 2022-09-02 20:17:49 +08:00 via iPhone
new 操作法是一个语法糖,这不是基本常识吗
|
4
DOLLOR 2022-09-02 21:15:16 +08:00
我的开发工作已经避开使用 function 关键字。只用箭头函数和对象方法,可避免误用 new 的情况。
const obj = { test(){ console.log(this) } } const test = () => {} const objTest = obj.test // Uncaught TypeError: obj.test is not a constructor new obj.test() // Uncaught TypeError: test is not a constructor new test() // Uncaught TypeError: objTest is not a constructor new objTest() |
5
qeqv 2022-09-02 23:15:50 +08:00
有什么问题? new 本来就是,新建一个空对象,原型链指向函数原型,然后把构造函数的 this 指过去执行
|
6
liuidetmks 2022-09-03 12:16:22 +08:00
直接用 ts 吧,忘记这些细节吧
|
7
YuJianrong 2022-09-07 03:51:29 +08:00
如果你是从 es5 过来的就会知道这些细节了。
现在知道不知道都无所谓,反正很少用了 |