其實一開始編js沒怎麼用過對象,一般都用func,func,func···但是用多了,感覺代碼一點都不美觀,還要這裡包一個函數,那裡包一個 函數,或者一直都是函數調用,不好看,而且一些重用的都要重寫的話就很麻煩(不好意思,對於我這種新手,開始還是一般用func比較高效率···)。所以 就決定開始要用object來編程才能更省事,下面就是我看了一些部落格文章關於類的見解,有什麼不對的希望各位可以多多給些指點:
對於類的編程,聲明的方法有如下幾種:1、var test = function(){};2、function test(){};3、var test = new Object();4、var test = {};···我現在能想到的就只有這四種,麻煩各位大神還有什麼可以聲明對象的繼續補充,小弟在此謝過!
此時要分開方法來說:
對於1、2方法,應該是有一些已有屬性的,就好像你給test.name加個值,但是你發現輸出test.name的時候是輸出 func 的名字,不過test可以加其他靜態屬性,但是還有沒有其他保留字,暫時我還沒繼續去找;
而對於3、4方法,是可以向test.name賦值的,也會正確輸出該值。
所以,對於func固有的屬性,若用func方法來聲明對象就可能有些值是不允許賦的,因此,個人更建議對象聲明時用的是3、4方法。但是,其實用func來聲明類的好處就是可以更直觀地初始化一些基本的值
接著就是類的繼承,下面舉個例子
var parent = function(name,age){ this.name = name; this.age = age; this.method = function(){ alert("This is my method!"); }}//類繼承var child = function(name,age){ parent.apply(this,arguments); //OR test.call(this,name);this.age = age; //Other method or variables}//這種繼承其實有一個好處就是可以直接在子類裡面執行個體化父類,父類的變數只要在func本體內就可以直接在子類中用了。但是,子類內執行個體化並不是萬全之策,下面再看看/*---------------------------------------------------------------------------*/var parent = function(name,age){ this.name = name; this.age = age;}parent.prototype = { run: function(){ alert(this.name + " is running!"); }, work: function(){ alert(this.name + " is working!"); },}var child = function(name,age){ this.name = name; this.age = age;}//類繼承child.prototype = new parent();var c = new child("li",20);c.run();//有alert,如果像之前在子類內用parent.apply方法,那麼parent.prototype的內容對於child是沒作用的,所以我就覺得這個就是子類內定義父類(parent.apply)和外面子類prototype(child.prototype = new parent())的區別