使javascript文本从不同的原型继承

使javascript文本从不同的原型继承,javascript,eval,literals,Javascript,Eval,Literals,我有一个可能与良好实践背道而驰的代码。然而,这不是我想要评论的——这纯粹是学术性的 <html> <head> <script> function run() { var fakeContext = { Array : fr.contentWindow.Array || fr.Array; //Another context/window array } fakeContext.Array.prototype.rem

我有一个可能与良好实践背道而驰的代码。然而,这不是我想要评论的——这纯粹是学术性的

<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>

函数运行(){
var fakeContext={
数组:fr.contentWindow.Array | | fr.Array;//另一个上下文/窗口数组
}
fakeContext.Array.prototype.remove=函数(el){/*一些代码*/};
有(伪造背景){
var someCode=“var x=['1','2'];x.remove('2');
eval(someCode);
}
}
在计算someCode时创建的此数组继承自代码运行所在的顶级数组,而不是继承自
fakeContext.array
。表示数组x没有原型函数
.remove()


我如何(如果有办法)获取
someCode
-字符串中的文本以从
fakeContext
s
数组继承。prototype

问题在于数组文本
[]
的计算方式与
新数组()的计算方式不同。第一个将只创建一个本机
数组
对象,而第二个将检查
数组
变量的作用域并将其作为构造函数执行

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')");
}
要使用不同上下文中的原型创建数组,您需要
eval
假窗口环境中的文本:

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')");

首先,您有几个语法错误。第二行:不能指定内部对象文字;在第7行:应该是
,JS中的关键字区分大小写。更正,感谢您指出。这看起来应该有效。可能是平台问题?你想做什么?为什么需要一个“假”数组类?我有代码来进一步解释这个问题。我试图在另一个上下文中运行一些代码。除了对数字、布尔值、字符串、数组等文本进行原型化之外,其他一切都很好。这将适用于我的情况,但是,我们偶尔会评估一些相当大的脚本,这需要花费一些时间来替换脚本中的所有文本。我没有说您需要替换它们。但你说这个问题纯粹是学术性的?为了生产,你应该考虑一个更好的方法。