1

このオブジェクトを変換/複製する動的な方法はありますか:

var object = {
    a: 2,
    b: function(){
         return this.a;
    }
}

この種の関数オブジェクトに:

function object(){};

object.a = 2;
object.b = function(){
    return this.a;
};

これは可能ですか?どうすれば動的に行うことができますか?

4

2 に答える 2

2

プロトタイプを使用しますが、すべてをコピーできます。

function toClass(obj) {
    var func = function () {};
    for(var i in obj) {
        if(obj.hasOwnProperty(i)) {
            func.prototype[i] = obj[i];
        }
    }

    return func;
}

もう 1 つの問題は、これが実際にどれほど有用であるか、および根本的な問題に対するより良い解決策があるかどうかです。

フィドル: http://jsfiddle.net/pb8mv/

于 2013-08-29T19:07:25.993 に答える
0

そのようなものが必要になるのは少し奇妙です。推測する必要がある場合は、オブジェクトがあり、それを拡張したいと考えています。つまり、そのオブジェクトに基づいて関数を作成したいので、後でそのオブジェクトの複数のインスタンスを作成します。それは可能であり、ここにその方法を示す小さなスニペットがあります:

var object = {
    a: 2,
    b: function(){
         return this.a;
    }
}
var extend = function(obj) {
    return function() {
        return Object.create(obj);
    }
};

var Class1 = extend(object);
var ob1 = Class1();
ob1.a = 10;

var Class2 = extend(object);
var ob2 = Class2();
ob2.a = 23;

console.log(ob1.b(), ob2.b());

スクリプトの結果は

10 23
于 2013-08-31T08:18:14.760 に答える