0

在 Javascript 中,创建类(或对象)的方式是使用;

function MyObj()
{
    this.someVar = "xyz";
    this.someMethod = function(){}
}

我的简单问题是这个函数与普通的 JavaScript 函数有什么不同......比如说一个添加 2 个数字的函数?

4

3 回答 3

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();

当你标记你的问题时,我将通过说构建你的函数的最佳方法来完成这个:

function MyObj(){
    this.someVar = "xyz";
}
MyObj.prototype.someMethod = function(){
    console.log(this.someVar);
}
var obj = new MyObj();
obj.someMethod();

这样,所有实例MyObj共享相同的功能,因此更轻。

于 2013-03-21T09:38:16.353 回答
1

区别不在于函数的内容,而在于你如何调用它。

如果您调用var myObj = new MyObj(),则会创建一个新对象。按照惯例,打算像这样使用的函数以大写字母开头。

如果您要在没有new关键字的情况下调用函数,那么函数内部会发生完全相同的事情,除了this它将是全局对象而不是新创建的对象。这在简单的“添加 2 个数字”函数中无关紧要,但如果您忘记它可能会导致非常奇怪的错误。

确保忘记调用无关紧要的一种方法new是将其放在函数的顶部:

function MyObj() {
     if (! (this instanceof MyObj)) {
         return new MyObj();
     }
     ...
}
于 2013-03-21T09:43:02.943 回答
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"
于 2013-03-21T09:46:22.707 回答