内部的变量value就如同myObject对象的私有变量一样

JavaScript贫乏块级成效域,未有private修饰符,但它装有函数成效域。成效域的利润是里面函数能够访问它们的外界函数的参数和变量(除了this和argument。内部中的函数中的this指向全局对象,argument指向里面函数的函数参数)。大家得以利用这种属性来效仿面向对象中的私有属性。

复制代码 代码如下:

var myObject=function(value){
var value=value || 0;
return{
increment:function(num){
value+=typeof num===’number’ ? num : 0;
},
setValue:function(num){
value = typeof num===’number’ ? num : value;
},
getValue:function(){
return value;
}
}
}(10)
//alert(myObject.getValue()); //10
myObject.setValue(20);
//alert(myObject.getValue()); //20
myObject.increment(5);
alert(myObject.getValue()); //25

如上例中,myObjeact是无名函数试行后归来的目的。佚名函数中变量value对于无名函数外界来讲是不足访谈的,但对此在那之中间的函数,是足以访谈的,无名氏函数实行落成,由于变量value仍被重临的myObject对象所存取,故value所攻陷的内部存款和储蓄器并未被灭绝。此时,内部的变量value就像同myObject对象的个人变量一样。

复制代码 代码如下:

var myObject=function(value){
var name=’MyObject’;
return{
increment:function(num){
value+=typeof num===’number’ ? num : 0;
},
setValue:function(num){
value = typeof num===’number’ ? num : value;
},
getValue:function(){
//alert(this);
return value;
},
getName:function(){
return name;
},
setName:function(nameStr){
name=nameStr;
},
toString:function(){
return ‘[Object:’+name+’]’;
}
澳门金莎网址,}
}
var obj=myObject(5);
obj.increment(6);
//alert(obj.getValue()); // 11
//alert(obj); //[Object:MyObject]
obj.setName(‘temp object 01’);
alert(obj) //[Object:temp object 01]

您大概感兴趣的稿子:

  • JS面向对象(3)之Object类,静态属性,闭包,私有属性,
    call和apply的行使,承继的二种达成格局
  • Javascript
    面向对象(一)(共有方法,私有方法,特权方法)
  • js类中的公有变量和私家变量
  • javascript入门基础之私有变量
  • javascript深切领悟js闭包
  • JavaScript 无名函数(anonymous
    function)与闭包(closure)
  • 前端开采必须掌握的JS之闭包及选拔
  • JavaScript闭包
    懂不懂由你左右自身是懂了
  • javascript使用闭包模拟目的的私家属性和措施

相关文章