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

前端之家收集整理的这篇文章主要介绍了Javascript – 获取函数的类所有者(方法)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一种方法可以知道哪个类拥有一个函数
例:
  1. function globalFunc(){
  2. //alert MyObject
  3. }
  4.  
  5. function MyObject(){
  6. }
  7. MyObject.prototype.test=function(){
  8. globalFunc();
  9. }
  10.  
  11. var o=new MyObject();
  12. o.test(); //alert MyObject

现在我使用这个解决方法

  1. function globalFunc(){
  2. alert(globalFunc.caller.__class__);
  3. }
  4.  
  5. function MyObject(){
  6. }
  7. MyObject.prototype.test=function(){
  8. globalFunc();
  9. }
  10. MyObject.prototype.test.__class__=MyObject;
  11.  
  12. var o=new MyObject();
  13. o.test(); //alert MyObject

但是有一个很大的问题,看看这个:

  1. function globalFunc(){
  2. alert(globalFunc.caller.__class__);
  3. }
  4.  
  5. function MyObject(){
  6. }
  7. MyObject.prototype.test=function(){
  8. var temp=function(){
  9. globalFunc();
  10. }
  11. temp();
  12. /* to simulate a simple closure,this may be for example:
  13. element.addEventListener("click",temp,false);
  14. */
  15. }
  16. MyObject.prototype.test.__class__=MyObject;
  17.  
  18. var o=new MyObject();
  19. o.test(); //alert undefined

那么,有一个明确的方法来获得这个?
我知道问题在哪里(类属性只是test而不是temp的属性),但我也不能将类添加到temp.

谢谢.

谢谢你的回复,一些澄清.

我试图与私人成员进行个人框架面向对象.

所以:

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

例如,$()是全局的

  1. Class({
  2. public:{
  3. MyClass:function(){
  4. },setName:function(name) {
  5. $(this).name=name; //set the private var name
  6. },getName:function(){
  7. return $(this).name;
  8. }
  9. },private:{
  10. name:"UNKNOWN"
  11. }
  12. })
  13.  
  14. var o=new MyClass();
  15. o.getName(); // UNKNOWN
  16. o.setName("TEST!!!");
  17. o.getName(); // TEST!!!
  18. o.name; //undefined
  19. $(o).name; //undefined

为了使用继承,$(),我需要知道什么类调用它和类的对象.

一切都很好,但如果我需要访问clousure中的私人成员,我必须添加
__类__
物业到clouser !!我不想要这个!

再次感谢,抱歉我的英语不好,我不是母语.

解决方法

在javascript中没有类.相反,几个对象可以“拥有”相同的功能.例如:
  1. function myFun(){
  2. alert(this.name);
  3. }
  4.  
  5. function Obj1(){
  6. this.name = "obj1";
  7. }
  8. Obj1.prototype.fun = myFun;
  9.  
  10. function Obj2(){
  11. this.name = "obj2";
  12. }
  13. Obj2.prototype.fun = myFun;
  14. var obj1 = new Obj1();
  15. var obj2 = new Obj2();
  16. obj1.fun();
  17. obj2.fun();

猜你在找的JavaScript相关文章