今天才知道,非箭头函数和非 native 函数都可以作为构造函数 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Kasumi20
V2EX    Javascript

今天才知道,非箭头函数和非 native 函数都可以作为构造函数

  •  
  •   Kasumi20 2022-09-02 18:08:03 +08:00 2111 次点击
    这是一个创建于 1209 天前的主题,其中的信息可能已经有所发展或是发生改变。

    所以可以用一个匿名构造函数来创建一个匿名对象: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' 
    7 条回复    2022-09-07 03:51:29 +08:00
    xiaoming1992
        1
    xiaoming1992  
       2022-09-02 19:26:33 +08:00 via Android
    用 ts ,类型严格一些,应该就可以避免纠结这些东西了。我应该两三年没用过 call bind 了,this 也只在 class 里面使用。
    chnwillliu
        2
    chnwillliu  
       2022-09-02 19:43:52 +08:00 via Android
    没有 class 的年代不都是这样么?你甚至可以在构造函数里 return 。

    然而谁在项目里这样写会被拉出来打的。
    SoloCompany
        3
    SoloCompany  
       2022-09-02 20:17:49 +08:00 via iPhone
    new 操作法是一个语法糖,这不是基本常识吗
    AV1
        4
    AV1  
       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()
    qeqv
        5
    qeqv  
       2022-09-02 23:15:50 +08:00
    有什么问题? new 本来就是,新建一个空对象,原型链指向函数原型,然后把构造函数的 this 指过去执行
    liuidetmks
        6
    liuidetmks  
       2022-09-03 12:16:22 +08:00
    直接用 ts 吧,忘记这些细节吧
    YuJianrong
        7
    YuJianrong  
       2022-09-07 03:51:29 +08:00
    如果你是从 es5 过来的就会知道这些细节了。
    现在知道不知道都无所谓,反正很少用了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1026 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:56 PVG 02:56 LAX 10:56 JFK 13:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86