文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>caller - js私有的方法尝试

caller - js私有的方法尝试

时间:2010-12-21  来源:Hehe123

    a. 需要通过一个函数a new 另一个函数b.

    b. new 后的新函数,是放在一个对象c里.

    c. 有关b 的所有操作,都必须通过对象c 才可以.

  这样的需求,是为了保证我所操作的对象,都能够在能够掌握的范围内,并且不会脱离一些控制.

  其实做到 c 那一步的时候, 基本上大家就能够想到, 我们会用 caller . 但是, caller 怎么样获得他具体的对象? 因为他是放在 c 里面了的.

 

  经过尝试, 我给出了这样的一种折中方式

  a 是构造器

  a 必须通过 c 才能够被创建

  a 被创建后的对象是放在 list 中的. 

  只能够通过调用 list 的子集,才能够调用a 被创建的对象, 否则不可以 .

代码
var list = {};
function c(name){
var s0 = new a(name);
s0
&& (list[name] = s0);
}
function a(name){
if(a.caller != c){
return {
f:
false,g:false
}
}
this.name = name;
}
a.prototype
= {
f :
function(){
var p = this;
p.g();
},
g :
function(){
var p = this;
if(list[p.name].g.caller != list[p.name].f){
alert(
"no");
return;
}
alert(
"yes");
}
}
c(
"hehe");
list[
"hehe"].g();
list[
"hehe"].f();
var b = new a("yes");
for(var i in b){
alert(b[i]);
}

 

var list = {};
function c(name){
        var s0 = new a(name);
        s0 && (list[name] = s0);
}
function a(name){
        if(a.caller != c){
           return {
                f:false,g:false
           }
        }
        this.name = name;       
}
a.prototype = {
        f : function(){
                var p = this;
                p.g();
        },
        g : function(){
                var p = this;
                if(list[p.name].g.caller != list[p.name].f){
                        alert("no");
                        return;
                }
                alert("yes");
        }
}
c("hehe");
list["hehe"].g();
list["hehe"].f();
var b = new a("yes");
for(var i in b){
    alert(b[i]);
}

 

  我这里, 为了保证私自创建的 a 对象是不被许可的, 所以一开始,就更改了 a 里的子类. 由于a是一开始就是做为原形的存在, 所以修改他的子类后, 他的属性就不存在了.

  这样, 我们做了一个简单的, 模拟私有的尝试. 呵呵.

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载