JS中的方法可以分为三类
1、对象方法
2、类方法
3、原型方法
例:
function People(name) { this.name=name; //对象方法 this.Introduce=function(){ alert("My name is "+this.name); } } //类方法 People.Run=function(){ alert("I can run"); } //原型方法 People.prototype.IntroduceChinese=function(){ alert("我的名字是"+this.name); } //测试 var p1=new People("Windking"); p1.Introduce(); People.Run(); p1.IntroduceChinese();
javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
A.prototype = new B();
理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。
function A(){ this.name="lee"; } A.prototype.run=function(){ return "123" } function B(){ } B.prototype= new A(); var objB = new B() console.log(objB.name)
B拥有A的所有属性和方法。
但是如果B有和A同样的方法
function A(){ this.name="lee"; } A.prototype.run=function(){ return this.name; } function B(){ this.name="JACK"; } B.prototype.run=function(){ return this.name; } B.prototype= new A(); var objB = new B() console.log(objB.run())
结果是 :JACK
函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。