在Introduction to Object-Oriented JavaScript中,给出了关于如何以面向对象的方式使用javascript的形式化描述。您的函数中的对象代码将线沿线的喜欢:如何正确使用Javascript进行OOP并明确指定变量作用域?
$(function() {
var oPerson = new cPerson("Florian");
alert("Hi! My name is " + oPerson.sMyNameIs());
});
function cPerson(sSetName)
{
var sName= sSetName;
var oPersonInst = this;
this.sMyNameIs = function() {
return sName;
};
}
有了更多的经验,你可能需要一个更皆伐参考实例化的类,所以你修改类代码本身(我加过另一功能):
function cPerson(sSetName)
{
var sName= sSetName;
var oPersonInst = this;
this.sMyNameIs = function() {
return oPersonInst.sName;
};
this.sMyFullNameIs = function() {
return oPersonInst.sMyNameIs();
};
}
现在我们已经来到翻过三种不同的方式类函数中提到的功能或变量:
return sName;
return this.sName;
return oPersonInst.sName;
苏ppose我想在实例化的类中非常明确地调用sName变量,随着开发的进行,这些示例函数将越来越复杂和深入。
我认为第一个选项('return sName;')
是不确定的,因为您不太确定您是否引用了正确的目标实例化类作用域中的变量。这可能是您打电话时的一个意外的本地变量。
第二,使用this
,恕我直言,也不是完美的,因为this
根据情况显然改变,你不能(?)依赖于你特别要求在实例化类权的变量。
所以第三个参考,恕我直言,最好看的参考。非常明确地定义在类的实例化。怎么可能有任何疑问,类的var sName的意思。
Q1:为什么用this.
定义的类中的函数?难道不能用oPersonInst.something = function() { //... };
来定义吗?
Q2:为什么在代码完成,我已经给,alert(oPersonInst.sMyNameIs());
工作,但alert(oPersonInst.sName);
没有(至少不内$.each(something, function() { //right here })
),但alert(sName);
DOES(因为上述原因不被看好恕我直言)工作?
Q3:可有人煲一些示例代码,甚至可能更改此示例代码,其中固体外的局部范围内引用时,会在外面工作,以及内部$.each(...)
回调函数(或其他回调相关功能)?
请原谅我的困惑,我们都是学习者,我感到脑海中有一个洞。这篇文章没有很好地解释我对此的担忧。