我正在尝试准确理解javascript新关键字的含义,为什么有必要以及何时应该使用它。
请考虑以下示例:
var x = new function(){
var self=this;
this.myFunction = function(){alert('foo ' + self.v)}
this.v='x';
};
var y = function(){
var self=this;
this.myFunction = function(){alert('foo ' + self.v)}
this.v='y';
return this;
}();
var f=function(){
var self=this;
this.myFunction = function(){alert('foo ' + self.v)}
this.v='z';
}
var z = new f();
x.myFunction();
y.myFunction();
z.myFunction();
x,y和z都是对象。可能与公共和私人成员变量有关。
x和z,使用new关键字构造。据我所知,new关键字只是执行函数并返回上下文。所以我想在上面的例子中,x和y本质上是单例,因为对原始函数的任何引用都会丢失?
除此之外,它们完全相同吗?如果没有差异,何时我想使用一种方法或避免另一种方法?
感谢您的任何解释。
答案 0 :(得分:2)
我正在尝试准确理解javascript新关键字的含义
a = new X()
意味着:
new
创建的对象添加行为),< / LI>
这类似于:
a = Object.create(/* prototype */ X.prototype, {});
a.constructor = X; /* magic property which can be read after */
X.apply(/* this */ a, /* args */[]);
为什么有必要以及何时使用它。
不是,你不必。 Object.create
使用基于JS原型的对象模型更自然地工作,并允许您创建任意原型链。
使用new
时,它的用法如下:
function Class(constructor_args) {
// init an object
this.a = 10;
};
Class.prototype.method1 = function() {
console.log(this.a);
}
var obj = new Class();
然后在使用new Class()
创建对象后,其原型引用包含其方法的对象Class.prototype
,而对象本身包含字段。
(个人观点:引入关键字new
是为了让Javascript更容易编写类似于Java / C ++和经典非原型对象模型的代码。)
Plase阅读了这些优秀的文章: