javascript命名空间范围

时间:2013-03-14 19:31:06

标签: javascript oop scope

我正在学习javascript,所以不要杀了我。 我正在定义更多不同的命名空间:

var name_Class = function(){
  this.variable_name_1 = {}

  this.method_name_1 = function() {}
}

然后..

var second_name_Class = function(){
  this.variable_name_1 = {}

  this.method_name_1 = function() {}
}

如果我在第一个变量中定义并初始化变量,我尝试在第二个变量中调用它,例如如果写c = new name_Class(),例如将每个数组重新定义为[],这样我就无法获得之前给出的值。你能救我吗?

2 个答案:

答案 0 :(得分:1)

我不确定你明白你在做什么。

var name_Class = function(){
  this.variable_name_1 = {}

  this.method_name_1 = function() {}
}

定义了一个名为name_Class的构造函数(另外,构造函数的第一个字符应按约定大写)

var c = new name_Class();

使用该构造函数创建一个对象。创建新对象并将构造函数绑定到该对象并调用,设置新对象c的variable_name_1和method_name_1属性。每次将new name_Class()分配给变量时,它将创建一个全新的对象,该对象具有绑定到它的构造函数。您对该函数创建的其他对象所做的任何更改都不会对此新变量产生影响。

所有这些都与您的第二个构造函数完全无关,您可以以相同的方式使用它,并且不会受到第一个构造函数的影响。

这些都不是技术名称空间,它们是类型名称空间通常是指其他变量被定义为属性的顶级变量。默认情况下,变量是在全局命名空间中定义的,对于浏览器而言,它是窗口。

例如,要在命名空间namespace1上创建类型为name_Class的新对象,您可以

var namespace1  = {};
namespace1.c = new name_Class();

答案 1 :(得分:-2)

如果您要在实例上设置值,可以传入参数。例如

var Swatch = function(){
  this.color = arguments[0] || 'green';
  this.callback = arguments[1] || function() {
     alert(this.color);
  }
  this.callback();
}

//defaults to green if no args are passed
var green = new Swatch();

//or pass in your own values
var red = new Swatch('red',function(){
  alert('New swatch created with color '+this.color);
});