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

Xin*_*nus 7 javascript

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

<object name>.prototype.<variable name>=function(){
//
//
}
Run Code Online (Sandbox Code Playgroud)

它如何与以下声明不同?

<object name>.<variable name>=function(){
//
//
}
Run Code Online (Sandbox Code Playgroud)

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

Igo*_*aka 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
Run Code Online (Sandbox Code Playgroud)

  • +1这是我见过的最简洁的解释. (2认同)

Mat*_*att 7

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

例如..

String.prototype.foo = function () {
  return 'bar';
};
Run Code Online (Sandbox Code Playgroud)

现在,每个字符串都将具有可用的函数foo().

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

在这里阅读有关基于原型的继承的更多信息

  • +1此外,值得明确声明在对象的原型上声明的函数*和属性*由该对象的所有实例继承,*甚至是那些已经实例化的实例.* (2认同)