gpt4 book ai didi

javascript - 有什么方法可以在调用构造函数之前重新设置 Function 对象的 "this"引用吗?

转载 作者:行者123 更新时间:2023-11-28 13:00:59 25 4
gpt4 key购买 nike

尝试实现 Javascript 沙箱方案,但现在遇到了一些麻烦。我需要将“上下文”参数传递给代码,该参数本质上将充当“全局”对象的句柄,但到目前为止还没有运气。

为了用一个简单的例子来说明这个问题,请考虑这段代码:

var foo = new Function(" this.baz = this.mux; return this ");
foo.mux = "mux";
foo.call();
console.log(foo.baz);
console.log(foo.toString());

输出:

$> undefined

$> function anonymous() { this.mux; return this; }

它显然不起作用,因为 Function 对象似乎没有像使用 new 创建的普通函数那样获得自己的 this

那么...有什么方法可以“重新设置”函数的 this 来预先指向自身(或者以任何其他方式解决该问题)?

编辑

好吧,根据我从评论部分的理解,我将需要一个构造的对象。

var foo = new Function(" return new function(){ this.baz /* = ?? */; return this; } ");

有没有办法以某种方式访问​​封闭的匿名函数的属性?就像“this.mux = foo.mux”(当然“foo”在该范围内不可见)?

最佳答案

我认为您对 new Function( 感到困惑做,。它不创建对象的实例,它只是创建一个函数。因此,与任何对象实例一样,您还需要使用 new关于这些。

所以你需要两个步骤..

  1. 创建您将从中创建对象的函数..

  2. 通过此函数使用 new 创建一个实例..

下面是一个简单的例子..

var fcreate = 
new Function('global', "this.global = global");

var f = new fcreate("hello");

console.log(f.global);

如果您不关心实例,我们可以忘记 this完全一样,只需创建一个捕获的范围作为参数..

例如..

var f = new Function("global", "console.log(global)");

f("This is a global to function");

f("This is another one");

关于javascript - 有什么方法可以在调用构造函数之前重新设置 Function 对象的 "this"引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com