摘要:的類與繼承的類與一般的面向對象語言有很大的不同,類的標識是它的構造函數,下面先定義一個類顯然我們可以看出這兩個函數是不同的,雖然它們實現了相同的功能。利用構造函數來繼承上面的方法子類顯然無法繼承父類的原型函數,這樣不符合我們使用繼承的目的。
javascript的類與繼承
javascript的類與一般的面向對象語言有很大的不同,類的標識是它的構造函數,下面先定義一個類
var User=function(name){ this.name=name; }; User.getName=function(){return this.name;}; User.prototype.get_name=function(){return this.name}; user1=new User("kkk"); user2=new User("jjj"); user1.getName=function(){console.log("hello");}; user1.get_name=function(){console.log("hello");};
顯然我們可以看出這兩個函數是不同的,雖然它們實現了相同的功能。
接下來我們先解釋構造函數,當我們使用new操作符生成對象時,對象在進入函數之前就已經存在了,構造函數所完成的僅僅是初始化的工作。
每個javascript的函數都生而具有prototype這一屬性,它們的new 與prototype.constructor有關。有以下關系存在:
User.prototype.constructor===User true
同時類的靜態方法如getName并不是一種值得推薦的方法,因為對于每一個被創建的對象都會創建相應的函數對象,方法在這里與其他的屬性并無任何不一致之處。
通過工廠方法創建類
var User=function(name){ var user; user.name=name; user.getName=function(name){return user.name;}; return user; }();
通過工廠方法可以直接創建繼承了原型方法的對象,但是這樣得到的問題在于沒有prototype屬性,需要手動添加,不推薦這種方法。
下面開始講繼承的方法,先給出一種示例
function Vip(name,level){ this.name=name; this.level=level; } Vip.prototype=User; alert(Vip.prototype.construtor===Vip);//false
這樣顯然不行,對子類的任何方法的改變都會導致父類的方法改變,更嚴重的是繼承鏈遭到破壞。
利用構造函數來繼承
function Vip(name,level){ User.call(this,name); this.level=level } User.prototype.hehe=function(){console.log("hehe");}; (new Vip("kf",2)).hehe();//error!
上面的方法子類顯然無法繼承父類的原型函數,這樣不符合我們使用繼承的目的。
function Vip(name,level){ this.name=name; this.level=level; } Vip.prototype=new User(); Vip.prototype.constructor=Vip;
這是一種折衷的繼承方式,本質上把子類的所有對象綁定到父類的一個對象上,子類原型方法就是這個對象的一個屬性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85429.html
摘要:類的方法相當于之前我們定義在構造函數的原型上。的構造函數中調用其目的就是調用父類的構造函數。是先創建子類的實例,然后在子類實例的基礎上創建父類的屬性。 前言 首先歡迎大家關注我的Github博客,也算是對我的一點鼓勵,畢竟寫東西沒法獲得變現,能堅持下去也是靠的是自己的熱情和大家的鼓勵。 許久已經沒有寫東西了,因為雜七雜八的原因最近一直沒有抽出時間來把寫作堅持下來,感覺和跑步一...
摘要:在類內部的方法中使用時。類的私有方法兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。先在本類中查找調用的方法,找不到才去基類中找。如果在繼承元組中列了一個以上的類,那么它就被稱作多重繼承。 類定義 類對象:創建一個類之后,可以通過類名訪問、改變其屬性、方法 實例對象:類實例化后,可以使用其屬性,可以動態的為實例對象添加屬性(類似javascript)而不影響類對象。 類...
摘要:首先捋清楚類和對象的關系類比如人類,指的是一個范圍對象比如某個人,指的是這個范圍中具體的對象中的作為構造函數時,就是一個類,通過操作符,可以返回一個對象。 JS中的類與類的繼承 我們知道,JS中沒有類或接口的概念,即不能直接定義抽象的類,也不能直接實現繼承。不過,為了編程的方便,我們可以在 JS 中模擬類和繼承的行為。首先捋清楚類和對象的關系: 類:比如人類,指的是一個范圍; ...
摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發就是不斷的創建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內存圖,成...
閱讀 917·2021-11-08 13:22
閱讀 2841·2021-09-29 09:45
閱讀 2824·2021-09-09 11:52
閱讀 2257·2019-08-30 13:20
閱讀 3740·2019-08-29 13:28
閱讀 1356·2019-08-29 12:32
閱讀 2720·2019-08-29 11:10
閱讀 1644·2019-08-26 13:34