在 Javascript 中,创建类(或对象)的方式是使用;
function MyObj()
{
this.someVar = "xyz";
this.someMethod = function(){}
}
我的简单问题是这个函数与普通的 JavaScript 函数有什么不同......比如说一个添加 2 个数字的函数?
在 Javascript 中,创建类(或对象)的方式是使用;
function MyObj()
{
this.someVar = "xyz";
this.someMethod = function(){}
}
我的简单问题是这个函数与普通的 JavaScript 函数有什么不同......比如说一个添加 2 个数字的函数?
功能不一样。不同之处在于您如何称呼它们。
例如,它们具有相同的效果:
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
共享相同的功能,因此更轻。
区别不在于函数的内容,而在于你如何调用它。
如果您调用var myObj = new MyObj()
,则会创建一个新对象。按照惯例,打算像这样使用的函数以大写字母开头。
如果您要在没有new
关键字的情况下调用函数,那么函数内部会发生完全相同的事情,除了this
它将是全局对象而不是新创建的对象。这在简单的“添加 2 个数字”函数中无关紧要,但如果您忘记它可能会导致非常奇怪的错误。
确保忘记调用无关紧要的一种方法new
是将其放在函数的顶部:
function MyObj() {
if (! (this instanceof MyObj)) {
return new MyObj();
}
...
}
没有任何。重要的是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"