一、靜態方法與實例方法的例子:
我們先來看一個例子來看一下JS中的靜態方法和實例方法到底是什么
靜態方法:
function A(){}
A.sayMeS=function(){
console.log("Hello World S!");
}
A.sayMeS();//輸出Hello World S!
實例方法:
function A(){}
A.prototype.sayMeE=function(){
console.log("Hello World E!");
}
var a=new A();
a.sayMeE();//輸出Hello World E!
二、二者的區別:
從定義上,實例方法要用到function這個對象中的prototype屬性來定義,靜態方法通過A.直接定義;從方法調用上,靜態方法可以直接通過A.來調用,實例方法要通過先定義一個引用變量,指向構造函數定義的新對象。
我們之前的博文已經討論過JS對象、構造函數、原型(參看Js中的對象、構造函數、原型、原型鏈及繼承),這里加深一下理解,我們之前已經說過函數是一個對象,函數對象中的屬性 prototype可以想成一個指針,指向一個方法(這樣不用每一次用構造函數創造一個新實例后都要將方法重新創建一遍)。這樣就好理解了,var a是A的一個引用,也就是指針,a就可以指向sayMeE這個方法,如果直接A.sayMeE()是會報錯的,因為A不是一個指針,a.sayMeS()也會報錯,因為a不是一個方法對象。
三、再談繼承:
繼承舉例:
function A(){
}
A.prototype.sayMeE=function(){
console.log("Hello World E!");
}
function B(){
}
B.prototype=new A();//實現了繼承
繼承就是將B的指針指向A對象,這種形式是用A的構造函數來構建對象。