Class「厳密な使用」を使用するように適合され、SO postから取得されたJohn Resig の単純な OOPを使用しています。
すべての例で、次のClass.extendような使用法が見られます。
var MyObj = Class.extend({
init:function(){},
prop: "Property"
});
しかし、そのような方法で使用することには大きな欠点があることがわかりました。「プライベート」変数を持つことができないため、thislikeへの参照を保存できません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);
});
};
});
} ());