javascript 实现 私有、公有 方法

IE8正式版出来了,喜欢图新鲜的我,便下载了个来安装。但随之,问题也来了,prototype.js框架出了问题,上网查了一下,就顺便下载了prototype对应于IE8的更新版本。打开看了一下代码,发现其中发生了不少变化,但其中有一点让我眼前一亮:javascript原来也可以实现私有方法了。先看一下我的代码:

 

 

首先解释一下,对于MyClass.prototype=(function(){... return {...}; })();这个奇怪的东西,因为初学者一定会被它弄得莫名奇妙,当初我第一次看到这种类似的代码,也是不解。

函数的声明方式通常是

function myFun()

{

    ....;

}

但我也们也可以省去函数名,这样就成了

function()

{

}

问题马上来了,这样声明后,怎么调用它呢?没有名字啊。。。。。其实有些地方,我们只需要用一次某个方法的时候,我们就可以这样声明了,比如这样:

window.οnlοad=function()

{

    //页面初始化代码

}

那么接着就是 (function(){})(); 这又是什么意思呢?我们调用一个方法的时候就像这样:

myFun();

所以我们可以这样理解:  在函数名后面加上(),就可以调用它,所以我们声明了一个没有名字的函数function(){} 后,马上调用它,所以就成了 function(){}(); 这个样子了,当然再加上个()调整一下优先级(其实也可以不用加),就成了这样 (function(){})();这种奇怪形式了。至于return {}; 这是json格式,在此不介绍,自己百度一下吧。

OK,既然都明白了,那么运行一下吧。看看结果。

结果?等等,为什么结果是两个test2?这跟我们想要的不一样啊。。。

其实在我的代码中ShowName和setName各留了两行被注释掉的代码

如果在ShowName中直接调用私有方法_ShowName的话,ShowName被应用于实例test1和test2上,但_ShowName却没有,所以在_ShowName中的this.name并没有访问到MyClass中的this.name,而此时_ShowName中的this代表window。所以访问失败,正确的调用应该是_ShowName.call(this); 当然this._ShowName();也是不行的,因为_ShowName并没有被作为prototype的一个成员返回给MyClass。所以其实MyClass并没有_ShowName这个方法。

 

方法是有些麻烦,但也算是实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值