使用自定义原型在javascript中创建函数

时间:2012-09-16 01:29:16

标签: javascript function prototype

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

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

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

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

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

这就是我目前的实施方式,

functionName.__proto__ = myObj;

工作正常。但__proto__已被弃用,我想看看是否还有其他安全方法。我想到了覆盖Function.prototype,但它不起作用。

3 个答案:

答案 0 :(得分: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]; } );
       }
     }

答案 1 :(得分: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的{​​{1}}属性既不可写也不可配置,这反映了这一点。

因此,为了实现您想要的目标,您需要一种方法来更改现有对象的原型。幸运的是,即将出版的Ecmascript 6标准似乎在最近的草案http://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aspecification_drafts&cache=cache&media=harmony:working_draft_ecma-262_edition_6_05-14-13-nomarkup.pdf中根据附件B.2.2标准Function

答案 2 :(得分:-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