1

私はほとんどの場合のをインポートしなければならないプロジェクトで働いていcomputed styleます...それで私は私のコードを少し素敵でシンプルで短くするためにカスタムアンダーhtml divsを作成しようとしました...これが私のために働くコードです..。。prototypeObject

Object.prototype.css=function(){
    return window.getComputedStyle(this);
}

のがで、それが必要な場合var aは、以下のようなものを使用する必要があります...nodehtml divheightdivprototype

a.css().height;

さて、問題は...どうすれば同じようなものfunctionを使用するprototypeように変更できますか...

a.css.height; // css insead of css()

jQueryはありません...

4

2 に答える 2

7

プロパティのように振る舞わせる必要がある場合は、ある程度の互換性を放棄する必要があります。最新のブラウザーのみがサポートされてObject.defineProperty()います。

次に例を示します。

function SomeType() {}
Object.defineProperty(SomeType.prototype, 'att', {
  get: function() {
    return this.att_;
  },
  set: function(value) {
    this.att_ = value;
  }
});

そしてあなたの場合、HTMLElementまたはHTMLDivElementのプロトタイプを拡張できます。のプロトタイプHTMLDivElementは から継承されHTMLElementます。したがって、次のようにできます。

Object.defineProperty(HTMLElement.prototype, 'css', {
  get: function(){
    return window.getComputedStyle(this);
  }
});
于 2012-11-22T14:20:41.357 に答える
0

Javascript では、関数はファースト クラス オブジェクトです。基本的に、関数定義は他の変数と同じです。次のすべてをプロパティに割り当てることができます。

a.css = "some value";
a.css = 22;
a.css = function() { return 1; };

今、それらを印刷しようとすると:

a.css //"some value"
a.css //22
a.css //function (){return 1;}

関数を呼び出すには、 を呼び出す必要がありますa.css()。目的の動作を得る 1 つの方法は、関数を実行し、出力を別のプロパティにバインドすることです。

Object.prototype.makeCSSProperty=function(){
    this.css = window.getComputedStyle(this);
}

a.makeCSSProperty();
a.css.height;

ただし、このプロパティは静的であり、メソッドを実行したときに存在していたスタイルのみを反映しますmakeCSSProperty()

于 2012-11-22T14:09:54.850 に答える