【问题标题】:Which inherited class called function?哪个继承的类叫做函数?
【发布时间】:2013-04-23 21:01:40
【问题描述】:

我想从调用该函数的函数中找出对象类的名称。我正在使用 John Resig 的 class inheritance concept

例如

var CoreStuff = Class.extend({ log: function(Message) { console.log(who + ' said ' + Message); });

var MyApp = CoreStuff.extend({ init: function() { this.log('Hello world!'); });

var app = new MyApp();

我如何确定层次结构中是否有 MyAppCoreStuff 或任何其他名为 log() 的对象?

我不想像目前那样向当前类传递任何参数。

【问题讨论】:

  • 调用它的对象将是app。如果你想知道它来自什么函数,你可以在登录时传入函数的名称,因为你控制着函数
  • @ben336 “我不想像目前那样向当前类传递任何参数。”我已经将当前对象作为第二个参数传递了,我认为我可以绕过它,这就是我问这个问题的原因。

标签: javascript oop object inheritance


【解决方案1】:
var CoreStuff = Class.extend({ log: function(Message) { 
                                         console.log(this.constructor.className + ' said ' + Message);                        }
                                    });
CoreStuff.className = "Core Stuff";    

var MyApp = CoreStuff.extend({ init: function() { this.log('Hello world!'); }});
MyApp.className = "My App";

【讨论】:

  • 我正在考虑沿着您的第二个选项的路径前进,但更进一步,并使用继承脚本自动将 className 添加到类中。你认为你可以扩展第二种方法吗?
  • 好吧,看起来它可以工作,但是当我实现它时,它只是为每个调用返回“Class”。我相信继承方法是罪魁祸首。您能否将更新后的方法放入继承方法中?
  • 我查看了 Class 实现。好像我们不能实现你的要求,因为Class.extend返回的值是function Class,我们传入的对象是用来填充function Class的原型属性=>所以当我们创建一个新对象时,对象的构造函数始终是 Class 并且继承自原型对象。
  • Class.extend 如果您不提供信息,则无法知道您的班级名称。 var CoreStuff 和 var MyApp 只是用来存储返回值。
  • 该死的。我可能需要研究 JavaScript 中类继承的其他实现,或者只是绕过这个限制。谢谢你的回答。
【解决方案2】:

这可能看起来很老,但如果有人仍然想知道我最近遇到了这个问题。之所以将所有内容都称为Class,是因为在 John 的脚本中使用匿名函数的方式。

我在这里写了一篇关于它的文章:http://www.nicolasbize.com/blog/javascript-inheritance-without-loosing-class-names/

以及 github 上作为小型 js 框架的概念证明:http://www.nicolasbize.com/moojs

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2023-04-06
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多