原型函数与javascript中的普通函数有何不同?

时间:2009-12-09 03:04:27

标签: javascript

可以在对象原型上声明Javascript函数,如下所示:

<object name>.prototype.<variable name>=function(){
//
//
}

这与下面的声明有何不同?

<object name>.<variable name>=function(){
//
//
}

原型函数与javascript中的普通函数有何不同?

3 个答案:

答案 0 :(得分:16)

原型函数是实例函数,而普通函数是“静态”函数。在类的原型上声明的函数将在该类的所有实例上可用。

var MyClass = function(){
};
MyClass.staticFunction = function(){alert("static");};
MyClass.prototype.protoFunction = function(){alert("instance");};

MyClass.staticFunction(); //OK
MyClass.protoFunction (); //not OK

var myInstance = new MyClass ();
myInstance.staticFunction(); //not OK
myInstance.protoFunction (); //OK

答案 1 :(得分:7)

在基础对象的原型上声明的函数由该对象类型的所有实例继承。

例如......

String.prototype.foo = function () {
  return 'bar';
};

现在,每个字符串都有函数foo()可用。

'test'.foo(); // returns 'bar'

阅读有关基于原型的继承here

的更多信息

答案 2 :(得分:0)

Matt和Igor已经提供了足够的代码示例,但是你可以阅读的最好的文章之一(简短,正确和重点)是Douglas Crockford撰写的Prototypal Inheritance

还有很多不同的方法可以通过流行的图书馆(DojoPrototype等)来促进继承。