javascript prototypeとconstractorの違い

6567 ワード

私達の設計者は冗長フィールドをよく使います.現在処理中のこの機能のサブテーブルのフィールド数を数えました.
103個
冗長性に反対するのではなく、冗長性は良い鋼ですが、刃物を使うべきです.
1,多くの冗長フィールドが必要です.原型に対してするだけで、どのようなものがインターフェースからバックグラウンドに伝わっているのか分かりやすくなります.どのような背景から取り出されたのですか?しかし、この業務がWCFインターフェースとして発表されたら、インターフェイスで開発された開発者はどうやってどれを輸入しなければならないのかを知ることができますか?論理を書き直しますか?
2,手が疲れました100個以上のフィールドはバックグラウンドで一つずつノックします.時間がかかります.
3,私はバックグランドでメモリやデータベースなどの書き換えが不可能なところからこれらの冗長データを取り出す傾向がありますが、これらのデータを取るのも卵が痛いことです.私達の設計者は簡単だと言います.HTMLから伝わったらいいです.しかし、インターネットは洪水猛獣です.フロントからの値はどう信じられますか?
ページはデータを収集することが多いです.メインリスト、3級/4級または5級連動の場合もあります.Knockoutjsを使わない前に、テンプレートをいっぱい書いて、それからclone、改name、value、jsの山を作っています.今はknockoutjsを使って、たくさんありますが、優雅になりました.
Knockoutjsは3つの字について:もし対象が観察可能でないならば、フロントの修正はjs対象に反映されないで、js対象上の修正もフロントページに反映されないことを観察することができます.
ですから、簡単なjsonでは満足できません.特に、observable Arayを使う必要があります.このarrayに保存されているオブジェクトごとの属性は観察できます.
上に100以上のフィールドがあると言いましたが、使っているのは三四十個です.各フィールドをjsに書いてはいけません.どうすればいいですか?
私の方法:まず表の対応する業務の実体の序例を1つのjsonに変えて、ページに出力して、1つのjs変数を与えて、それからこのjsonの中の各keyを循環して、prototypeを通じてjsの中の“種類”を拡張します.
以下のように始まる
 1     _.ExtendTypeFromJson = function (json, type, propertyWrap) {

 2         for (var item in json) {

 3             var value = json[item];

 4 

 5             if (typeof (propertyWrap) == "function")

 6                 type.prototype[item] = propertyWrap(value);

 7             else

 8                 type.prototype[item] = value;

 9         }

10     }
 
使用:
1 var tplData = @Html.Raw(JsonConvert.SerializeObject(tpl)) ;

2 var Port = function(){

3     this.IsCurrent = ko.observable(false);

4 }

5 ExtendTypeFromJson(tplData, Port);
 
実は、このように書くのは問題があります.多くのページの中で、propertywrapというパラメータを使っていないので、問題が発覚しませんでした.
今日は使う時、各属性を観察できるように拡張したいです.
1 ExtendTypeFromJson(tplData, Port, function(v){

2     return ko.observable(v);

3 })
 
問題が出てきました.宣言のPortの例は、IsCurrentを除いて、任意のインスタンスの属性の値を変更します.すべてのインスタンスの対応する属性の値は同じです.
悩んでみましたが、納得できませんでした.プロトタイプにしか問題がないことを知っています.それで実現方法を変えました.
 1     _.ExtendConstrctorFromJson = function (json, type, propertyWrap) {

 2 

 3         var __type = type;

 4         type = function () {

 5             __type.call(this);

 6 

 7 

 8             for (var item in json) {

 9                 var value = json[item];

10 

11                 if (typeof (propertyWrap) == "function")

12                     this[item] = propertyWrap(value);

13                 else

14                     this[item] = value;

15             }

16         }

17 

18         return type;

19     }
使用します.戻り値があることに注意してください.
1     Port = ExtendConstrctorFromJson(tplData, Port, function(v){

2         return ko.observable(v);

3     });  
運行しています.やっとOKです.
------------------------------
QNMGBGSQ
最近は昔の相棒がいますが、GSQに陰になりました.
知己として死ぬ鳥が餌になる
彼はアンダーラインがなくてもいいですが、私達はやはり仕事のように頭を上げます.おべっかを使うのは永遠にただの鳥です.