Javascript正常功能和功能对象之间的区别

时间:2013-03-21 09:35:50

标签: javascript jquery prototypal-inheritance

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

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

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

3 个答案:

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

当您标记问题时,我会说完建立您的功能的最佳方式就是这样:

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"