5

特定の形式で ajax 呼び出しから返された一連の JSON 文字列があり、それらすべてを独自の Javascript オブジェクトに変換し始めると、ここで Javascript について話しているので、もっと簡単な方法があるのではないかと考え始めます。

var manyOfThem = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ]; そして、これらの各オブジェクトを関数に簡単に関連付けて、次のようなことができるようにしたいと思います。

myClass.prototype.doSomething = function() {
  // do something to this.name
};

$.each(manyOfThem, function(index, item) {
  item.doSomething();
});

私の懸念は、(繰り返しがあるため)これをやりたくないということだと思います:

var myClass = function(item) {
  this.name = item.name;
  // do the same for the rest of item's potentially 20 properties
};

var oneOfThem = new myClass(manyOfThem[0]); // I think this is redundant....
oneOfThem.doSomething();

とにかく、(セキュリティ?)理由があれば、それを吸い上げてすべて手動で行う必要がある場合も共有してください、ありがとう!

4

3 に答える 3

3

つまり、次のようなものです ( jsfiddleを参照):

var MyClass = function() {};
MyClass.prototype = {
    doSomething: function() {
        alert(this.name);
    }
};

それで

var manyObj = $.map(manyOfThem, function(obj) {
   return $.extend( new MyClass(), obj );
});

だからあなたは呼び出すことができます:

manyObj[0].doSomething();  // alert("a")

manyOfThemただし、この方法ではオブジェクトの直接コピーは保持されません。(上記の例では、変更manyOfThem[0].name = "foo";は影響せず、manyObj[0]への呼び出しmanyObj[0].doSomething();は引き続き alert"a"になります。オブジェクトへの直接参照を保持するには、次のようにします。

var manyObj = $.map(manyOfThem, function(obj) {
    function F() {};
    F.constructor = MyClass;
    F.prototype = obj;
    $.extend(F.prototype, new MyClass());
    return new F();
});


manyObj[0].doSomething();  // alert("a")

manyOfThem[0].name = "foo";  // modify the referenced object

manyObj[0].doSomething();  // alert("foo") ..also modifies the behaviour of the instance
于 2013-04-04T02:47:29.567 に答える
2

クラスを使用しない1つの解決策は

var manyOfThem = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];

function doSomething(){
    console.log(this.name)
}

$.each(manyOfThem, function(index, item) {
  doSomething.call(item);
});

デモ:フィドル

タイプのインスタンスを作成する場合はMyClas

var manyOfThem = [ { name: 'a' }, { name: 'b' }, { name: 'c' } ];

function MyClass(item){
    $.extend(this, item);
}

MyClass.prototype.doSomething = function(){
    console.log(this.name)
}

$.each(manyOfThem, function(index, item) {
    var obj = new MyClass(item);
    obj.doSomething()
});

デモ:フィドル

于 2013-04-04T03:03:38.423 に答える
0

できるよ

var myClass = function(item){  
    for( i in item){  
        if (item.hasOwnProperty(i)){
            this[i] = item[i];
        }
    }
};

myClassこれにより、コンストラクターでの繰り返しの割り当てが削減されます。

于 2013-04-04T02:55:22.800 に答える