在Javascript中,创建类(或对象)的方法是使用;
function MyObj()
{
this.someVar = "xyz";
this.someMethod = function(){}
}
我的简单问题是这个函数与普通的JavaScript函数有多么不同......比如一个函数可以添加2个数字?
答案 0 :(得分:3)
功能没有区别。不同之处在于你如何称呼它们。
例如,那些具有相同的效果:
function MyObj(){
this.someVar = "xyz";
this.someMethod = function(){
console.log(this.someVar);
}
}
var obj = new MyObj();
obj.someMethod();
和
function someMethod(){
console.log(this.someVar);
}
function MyObj(){
this.someVar = "xyz";
}
var obj = new MyObj();
someMethod.call(obj);
和
function someMethod(){
console.log(this.someVar);
}
function MyObj(){
this.someVar = "xyz";
}
var obj = new MyObj();
obj.f = someMethod;
obj.f();
当您标记问题prototypal-inheritance时,我会说完建立您的功能的最佳方式就是这样:
function MyObj(){
this.someVar = "xyz";
}
MyObj.prototype.someMethod = function(){
console.log(this.someVar);
}
var obj = new MyObj();
obj.someMethod();
这样,MyObj
的所有实例共享相同的功能,因此更轻。
答案 1 :(得分:1)
与函数的内容不同,不同之处在于你如何称呼它。
如果您致电var myObj = new MyObj()
,则会创建一个新对象。按照惯例,打算使用的函数以大写字母开头。
如果你在没有new
关键字的情况下调用函数,那么函数内部会发生完全相同的事情,除了this
将是全局对象而不是新创建的对象。这在一个简单的“添加2个数字”函数中无关紧要,但如果你忘了它就会导致非常奇怪的错误。
如果您忘记new
来电,确保无关紧要的一种方法是将其放在功能的顶部:
function MyObj() {
if (! (this instanceof MyObj)) {
return new MyObj();
}
...
}
答案 2 :(得分:1)
无。重要的是使用new
关键字。
见这里:
function Fun(){
this.method = function(){
return "Bar";
}
return "Foo";
}
var value = Fun(); // assigns the return value of Fun() to value
alert(value); // "Foo"
// alert(value.method()); // won't work because "Foo".method doesn't exist
var instance = new Fun(); // assigns a new instance of Fun() to instance
alert(instance); // [object Object]
alert(instance.method()); // "Bar"