【问题标题】:How do I list all "Classes" defined in JavaScript?如何列出 JavaScript 中定义的所有“类”?
【发布时间】:2011-12-06 16:19:02
【问题描述】:

JavaScript 中有 ObjectSpace 吗?

假设我在这样的独立闭包中定义了这些“类”:

(function() {
  var Model;
  Model = (function() {
    function Model() {}
    return Model;
  })();
}).call(this);

(function() {
  var View;
  View = (function() {
    function View() {}
    return View;
  })();
}).call(this);

(function() {
  var Controller;
  Controller = (function() {
    function Controller() {}
    return Controller;
  })();
}).call(this);

有没有办法在 JavaScript 中查找所有这些自定义类?比如:

Object.classes;

即使它们都在同一个范围内,有可能吗?

var Model;
Model = (function() {
  function Model() {}
  return Model;
})();

var View;
View = (function() {
  function View() {}
  return View;
})();

或者我只需要手动注册它们?也许像:

var ObjectSpace = {};
ObjectSpace.classes = [Model, View, Controller];

只是在玩 JavaScript/CoffeeScript 和 Ruby 的想法。

【问题讨论】:

  • 那是什么模式?您在示例 1 中的代码什么都不做,示例 2 与 function Model() {} function View() {} 完全一样

标签: javascript ruby coffeescript


【解决方案1】:

没有。

你可以在coffeescript中做的是

Classes = global.Classes = []

Classes.push class Model
    constructor: -> ...

或在javascript中

global.Classes = {}

Model = Classes.Model = function(){
    ...
}

【讨论】:

    【解决方案2】:

    你需要按照你说的去做:

        ObjectSpace = {};
        ObjectSpace.classes = [Model, View, Controller];
    

    在 JavaScript 中,不包括类结构。您总是直接与对象交互并从对象继承。

    一个例子:

        function Model(name) {
            this.name = name;
        };
        Model.prototype.show = function() {
            alert('This model has name: '+this.name);
        };
        var model = new Model('test');
        model.show();   // 'This model has name: test'
    

    当您使用new 关键字时,js 解释器将首先在新实例中建立指向构造函数原型的原型链接。该原型对象将在模型的所有实例之间共享。如果原型上的属性/方法发生更改,所有实例都会立即看到该更改,除非您执行Model.prototype = { show: ... } 之类的操作。原因是您实际上是在为原型创建一个新引用,但 Model 的所有当前实例都指向旧引用。

    【讨论】:

      【解决方案3】:

      您必须手动注册它们才能获得它们的列表。

      javascript 语言中没有“类”这样的东西,所以语言本身实际上并不知道它们。它们是与原型或函数一起使用的约定,以提供类似于其他语言所支持的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-29
        • 2020-02-27
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 2011-07-23
        • 2018-11-10
        • 1970-01-01
        相关资源
        最近更新 更多