gpt4 book ai didi

Javascript - 获取函数(方法)的类所有者

转载 作者:数据小太阳 更新时间:2023-10-29 04:41:24 24 4
gpt4 key购买 nike

有没有办法知道哪个类拥有一个函数?示例:

function globalFunc(){
//alert MyObject
}

function MyObject(){
}
MyObject.prototype.test=function(){
globalFunc();
}

var o=new MyObject();
o.test(); //alert MyObject

现在我正在使用这个解决方法:

function globalFunc(){
alert(globalFunc.caller.__class__);
}

function MyObject(){
}
MyObject.prototype.test=function(){
globalFunc();
}
MyObject.prototype.test.__class__=MyObject;

var o=new MyObject();
o.test(); //alert MyObject

但是有个大问题,看这个:

function globalFunc(){
alert(globalFunc.caller.__class__);
}

function MyObject(){
}
MyObject.prototype.test=function(){
var temp=function(){
globalFunc();
}
temp();
/* to simulate a simple closure, this may be for example:
element.addEventListener("click",temp,false);
*/
}
MyObject.prototype.test.__class__=MyObject;

var o=new MyObject();
o.test(); //alert undefined

那么,有明确的获取方式吗?我知道问题出在哪里(class 属性只是测试属性而不是临时属性),但我也不能将 class 添加到 temp。

谢谢。


感谢您的回复,一些澄清。

我正在尝试做一个面向私有(private)成员的面向对象的个人框架。

所以:

globalFunc 是一个特殊函数,我用它来获取“私有(private)”属性,我不能用调用方法调用它或传递一些参数,唯一的参数我传递的是“这个”:

例如,$() 是全局的

Class({
public:{
MyClass:function(){
},

setName:function(name) {
$(this).name=name; //set the private var name
},
getName:function(){
return $(this).name;
}
},
private:{
name:"UNKNOWN"
}
})

var o=new MyClass();
o.getName(); // UNKNOWN
o.setName("TEST!!!");
o.getName(); // TEST!!!
o.name; //undefined
$(o).name; //undefined

要使用继承 $(),我需要知道哪个类调用它以及该类的对象。

一切正常,但如果我需要访问一个 clousure 中的私有(private)成员,我必须添加__class__ 属性(property)给clouser!我不想要这个!

再次感谢,抱歉我的英语不好,我不是母语人士。

最佳答案

在 javascript 中没有类。相反,多个对象可以“拥有”相同的功能。例如:

function myFun(){
alert(this.name);
}

function Obj1(){
this.name = "obj1";
}
Obj1.prototype.fun = myFun;

function Obj2(){
this.name = "obj2";
}
Obj2.prototype.fun = myFun;
var obj1 = new Obj1();
var obj2 = new Obj2();
obj1.fun();
obj2.fun();

关于Javascript - 获取函数(方法)的类所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1560017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com