5

所以我创建了一个这样的函数,

var functionName = function(arg1) { //code logic here; }

同时,我需要这个函数作为一个对象工作。它不会真正保存任何东西,但将从另一个对象访问数据。

var myObj = new Object();
myObj.x = 3;
myObj.y = 4;

所以当我去的时候,functionName.x它应该返回myObj.x。该myObj对象正在其他地方维护,我无法控制它。

这就是我目前实现它的方式,

functionName.__proto__ = myObj;

它工作正常。但是__proto__已经被弃用了,我想看看是否有其他安全的方法。我想过重写Function.prototype,但它不起作用。

4

3 回答 3

1

我在这里遇到同样的问题。不幸的是,在 EcmaScript 5.1 下没有好的解决方案。

在语言规范http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf中,它在 13.2“创建函数对象”中说新的 [[Prototype]] 内部属性创建的函数对象始终是标准的内置函数原型对象。

如同一规范的 13.3 中所述,使用 Function 构造函数也无济于事,因为由new Function(…)13.2 中详述的方法构造的函数也无济于事。(这反映在 的prototype属性Function既不可写也不可配置的事实上。

所以要实现你想要的,你需要一个方法来改变已经存在的对象的原型。幸运的是,即将发布的 Ecmascript 6 标准似乎Object.prototype.__proto__按照最近草案http://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aspecification_drafts&cache=cache&media=harmony:working_draft_ecma-中的附件 B.2.2 进行了标准化262_edition_6_05-14-13-nomarkup.pdf

于 2013-06-06T11:45:11.353 回答
1

你想为 myObj 实现一个委托:

     var functionName = function(arg1) { // code }

     functionName.myObj = new MyObj();
     for (prop in functionName.myObj) {
       if (functionName.myObj.hasOwnProperty(prop)) {
         functionName.__defineGetter__(prop, function() { return functionName.myObj[prop]; } );
       }
     }
于 2012-09-16T02:29:44.657 回答
-1

你可以设置prototype函数的。

function functionName(arg1) { 
    //code logic here;
}

var myObj = { x: 3, y: 4 };
functionName.prototype = myObj;

var obj = new functionName();
console.log(obj.x, obj.y); // will output 3, 4
于 2012-09-16T02:36:06.300 回答