1、靜態方法與實例方法的例子:html
咱們先來看一個例子來看一下JS中的靜態方法和實例方法究竟是什麼?promise
靜態方法:函數
function A(){}post
A.col='red' //靜態屬性ui
A.sayMeS=function(){this
console.log("Hello World S!");.net
}prototype
A.sayMeS();//輸出Hello World S!指針
實例方法: htm
function A(){
this.Color="yellow" //實例屬性
}
A.prototype.age=14; //實例屬性
A.prototype.sayMeE=function(){
console.log("Hello World E!");
}
var a=new A();
a.sayMeE();//輸出Hello World E!
注意:咱們還有一種寫法,以下:
A.prototype = new Animal();
或者
A.prototype = {
aa:32323,
say: function() { console.log("My color is " + this.color); }
}
這個寫法,會覆蓋前面的A.prototype.age 和 A.prototype.sayMeE ,因此必定要注意順序,把這個兩種寫法放到前面,而後再寫本身定義的
2、兩者的區別:
從定義上,實例方法要用到function這個對象中的prototype屬性來定義,靜態方法經過A.直接定義;從方法調用上,靜態方法能夠直接經過A.來調用,實例方法要經過先定義一個引用變量,指向構造函數定義的新對象。
咱們以前的博文已經討論過JS對象、構造函數、原型(參看Js中的對象、構造函數、原型、原型鏈及繼承),這裏加深一下理解,咱們以前已經說過函數是一個對象,函數對象中的屬性 prototype能夠想成一個指針,指向一個方法(這樣不用每一次用構造函數創造一個新實例後都要將方法從新建立一遍)。這樣就好理解了,var a是A的一個引用,也就是指針,a就能夠指向sayMeE這個方法,若是直接A.sayMeE()是會報錯的,由於A不是一個指針,a.sayMeS()也會報錯,由於a不是一個方法對象。
3、再談繼承:
繼承舉例:
function A(){ }
A.prototype.sayMeE=function(){
console.log("Hello World E!");
}
function B(){ }
B.prototype=new A();//實現了繼承
繼承就是將B的指針指向A對象,這種形式是用A的構造函數來構建對象。