Class
「厳密な使用」を使用するように適合され、SO postから取得されたJohn Resig の単純な OOPを使用しています。
すべての例で、次のClass.extend
ような使用法が見られます。
var MyObj = Class.extend({
init:function(){},
prop: "Property"
});
しかし、そのような方法で使用することには大きな欠点があることがわかりました。「プライベート」変数を持つことができないため、this
likeへの参照を保存できませんvar $this = this;
。私は自分のケースの解決策を見つけましたが、今Class.extend
では次の方法で使用しています:
var MyObj = Class.extend(new function(){
var $this = this;
this.init = function(){};
this.prop = "Property";
});
私の場合はすべてうまくいきますが、長期的に問題を引き起こす可能性があるものがあるかどうかを知りたいですか?
このようにして、私のアプリケーションはブラウザでより多くのメモリを消費しますか?
ニーズを実装するために必要な代替方法は何ですか?
注:イベントとコールバックを多用するため、$thisを保存する必要があるため、this
オブジェクトのすべてのメソッドとプロパティに簡単にアクセスできるように「元の」を参照したい.
編集: 要求どおり、これは私のコード例です:
(function () {
"use strict";
window.QuickPlay = Class.extend(new function () {
var $this = this;
this.init = function (initData) {
$this.elementsToHide.push(initData.el);
$(function () {
playProcessStart();
Sys.Application.add_load(function () {
$find("ctl00_ContentPlaceHolderMain_ctrlPlayPopup1").add_closed(function () { $this.setElementsVisibility(""); });
});
$this.setElementsVisibility("hidden");
});
};
this.elementsToHide = [];
this.setElementsVisibility = function (visibility) {
$.each($this.elementsToHide, function (i) {
$("#" + this).css("visibility", visibility);
});
};
});
} ());