【发布时间】:2013-07-25 22:41:25
【问题描述】:
我正在使用 John Resig 的简单 OOP Class,它适用于“使用严格”并取自 SO post。
在所有示例中,我都看到Class.extend 的用法如下:
var MyObj = Class.extend({
init:function(){},
prop: "Property"
});
但我发现以这种方式使用它对我来说有一个很大的缺点——我不能有“私有”变量,所以我不能像 var $this = 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);
});
};
});
} ());
【问题讨论】:
-
哎呀,不。我几乎不敢相信这真的对你有用。请向我们展示您如何将这个“类”与事件和回调一起使用;也许发布您的实际代码(至少涉及
$this的方法)。 -
@Bergi 我添加了示例 - 这确实有效,代码已经通过了 QA 阶段:)
-
在任何对象内部,您都应该能够访问
this,它会存储到当前对象。 -
@travis 如果你看到,在 jQuery 文档准备好时,我正在使用 $this,因为如果我要使用它,它不会引用 QuickPlay 的实例 :)
-
然后解雇 QA 团队:-/ 要看到它崩溃,您可以尝试创建多个实例。或者它应该是一个单身人士?那么你根本不应该使用
Class。
标签: javascript oop