命名空间模式不起作用?

时间:2014-07-17 10:23:07

标签: javascript meteor

为什么以下代码会抱怨Model未定义?

// models/person.js

Model = Model || {}; // ReferenceError: Model is not defined.

_.extend(Model, {
  Person: function(name) {
    this.name = name;
  }
});

var adam = new Model.Person("Adam");

3 个答案:

答案 0 :(得分:1)

基于Akhlesh回答。

我创建了一个定义share的文件:

// lib/_share.js

if (Meteor.isClient) {
  share = window;
}

if (Meteor.isServer) {
  share = global;
}

然后这有效:

// models/person.js

Model = share.Model || {};

答案 1 :(得分:0)

严格模式下会出现此问题。

试试这个:

var Model;
Model = Model || {};

严格模式的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode#Converting_mistakes_into_errors

答案 2 :(得分:0)

实际上你应该检查Model作为window的属性或使用var。

  Model = window.Model || {}; 

OR

  var Model = Model || {};