gpt4 book ai didi

javascript - 使 javascript 文字继承不同的原型(prototype)

转载 作者:行者123 更新时间:2023-11-28 08:26:51 25 4
gpt4 key购买 nike

我有一些代码可能违背了良好实践。然而,这不是我想要评论的内容 - 这纯粹是学术性的。

<html>
<head>
<script>
function run() {
var fakeContext = {
Array : fr.contentWindow.Array || fr.Array; //Another context/window array
}

fakeContext.Array.prototype.remove = function(el) {/*some code*/};

with (fakeContext) {
var someCode = "var x = ['1', '2']; x.remove('2')";
eval(someCode);
}
}
</script>
</head>
<body>
<iframe src="about:blank" name="fr"></iframe>
</body>
</html>

在评估 someCode 时创建的数组继承自代码运行的顶级数组,而不是继承自 fakeContext.Array。意味着数组 x 没有原型(prototype)函数 .remove()

如何(如果有办法)获取 someCode 字符串中的文字以从 fakeContexts Array.prototype 继承>?

最佳答案

问题是数组文字[] 的计算方式与new Array() 不同。第一个只会创建一个 native Array 对象,而第二个会检查 Array 变量的范围并将其作为构造函数执行。

var fakeWin = fr.contentWindow || fr;
var fakeContext = {Array: fakeWin.Array};

with (fakeContext) {
Array.prototype.remove = function(el) {/*some code*/};
eval("var x = new Array('1', '2'); x.remove('2')");
}

要使用来自不同上下文的原型(prototype)创建数组,您需要在假窗口环境中评估文字:

var fakeWin = fr.contentWindow || fr;

with (fakeWin) {
Array.prototype.remove = function(el) {/*some code*/};
eval("var x = new Array('1', '2'); x.remove('2')");
}

// or:

fakeWin.Array.prototype.remove = function(el) {/*some code*/};
fakeWin.eval("var x = new Array('1', '2'); x.remove('2')");

关于javascript - 使 javascript 文字继承不同的原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296075/

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