關於javascript中靜態成員和實例成員的詳細解釋
在我們了解什么是靜態成員和實例成員之前,我們首先來了解一下什么是實例?
實例就是由構造函數創建出來的對象。
例如案例中 p 就是實例:
function Person() {}// 此函數為構造函數
var p=new Person(); // p為構造函數創建出來的對象
我們在討論靜態成員和實例成員時候,把函數當成構造函數, 把創建出來的對象稱之為實例。在此明白了什么是實例,下面我們就可以說什么是靜態 成員和實例成員了。
首先什么是實例成員?
實例成員:由構造函數創建出來的對象能直接訪問的屬性和方法,包括:對象本身 以及原型中的所有的屬性和方法。
案例如下: function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHi = function() {
console.log("hello, rose");
};
var p = new Person("jack", 19);
( p.name p.age p.sayHi) 括號內三個就是實例成員了。
再次什么是靜態成員?
靜態成員:由構造函數直接訪問到的屬性和方法。大家注意是直接訪問的屬性和方法,間接獲取就不是了。
案例如下: function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person("jack", 19);
Person.say = function() { alert("這是靜態方法"); };
Person.say 就是靜態成員
Person.length 也是靜態成員,因為length是函數中的 方法,是來直接獲取函數中形參的個數。
接下來會有人問,在實際工作中有什么用?我個人認為工作中用到的機會不多,有人會說工作中既然用的不多, 干嘛還廢那么話來說,但是對於我們看Jquery源碼是有用處的。
jQuery 的 each方法就是給靜態成員實現這個方法,然后實例成員直接調用這個方法(大多數框架中都是使用該方法) 。
所有有了兩種使用方式:
$.each("div",function(){})
$("div").each(function(){})