类的创建与继承
一、類的創建
在面向對象編程中,類(class)是對象(object)的模板,定義了同一組對象(又稱實例)共有的屬性和方法。JavaScript語言里是沒有類的概念的,但是我們通過以下方法也可以模擬出類。
1. 利用this關鍵字:
function User(){this.name="Sarah";this.age="23";this.getInfo=function(){return this.name + " " + this.age;} } //使用類 var user=new User(); alert(user.getInfo());2. 原型方法
利用prototype關鍵字和this關鍵字實現
由于class本質還是一個function,因此它就會擁有一個的prototype屬性,當new一個class時,會把class的porototype屬性賦值給這個新對象的 __proto__屬性。
function User(name){this.name=name||"sarah";this.age="23"; } User.prototype={getInfo: function(){return this.name+" "+this.age;} } var user = new User(); alert(user.getInfo());//訪問方法3. 利用Object.create()方法構造
為了解決"構造函數法"的缺點,更方便地生成對象,Javascript的國際標準ECMAScript第五版(目前通行的是第三版),提出了一個新的方法Object.create()。
User={name:'hello',age:'23',getInfo:function(){return this.name + " " + this.age;} }//使用 var user=Object.create(User); alert(user.getInfo());4. ES6引入了Class語法糖
class User{ constructor(name, age){this.name="sarah";this.age ="23";}getInfo(){return this.name+' '+this.age;} }var user = new User(); console.log((user.getInfo()));//Sarah 23 class Person{constructor(skin,language){this.skin=skin;this.language=language;}say(){console.log('I am a Person')} }console.log(typeof Person);//function var p = new Person('unkown','unknown'); console.log(p);//Person {skin: "unkown", language: "unknown"} console.log( __proto__==Person.prototype);//ture ?
?
new一個對象時,會經歷以下幾個步驟(摘自javascript高級程序設計):
(1)創建一個對象;
(2)將構造函數的作用域賦值給新對象(因此this就指向了這個新對象);
(3)執行構造函數中的代碼(為這個新對象添加屬性);
(4)返回新對象
constructor 方法是默認的方法,在new一個對象時,自動調用該方法。在一個類中必須有一個constructor,如果沒有定義,則會默認添加一個。
二、class的繼承
和其他面向對象語言一樣,class用extends實現繼承。
(1) 子類沒有constructor時
class American extends Person{aboutMe(){console.log(this.skin+' '+this.language)} }子類American繼承父類Person,子類沒用定義constrcutor,則默認添加一個,并且在constrcutor中調用super函數,相當于調用父類的構造函數。調用super函數是為了在子類中獲得父類的this,調用之后this指向子類。也就是父類.prototype.constructor.call(this)。
(2)?子類有constructor
子類必須在constructor方法中調用super方法,否則new實例時會報錯。因為子類沒有自己的this對象,而是繼承父類的this對象。如果不調用super函數,子類就得不到this對象。super()作為父類的構造函數,只能出現在子類的constructor()中;但是super指向父類的原型對象,可以調用父類的屬性和方法。 class Chinese extends Person{constructor(skin,language,positon){//console.log(this);//報錯 super(skin,language);//super();//console.log(this);調用super后得到了this,不報錯this.positon=positon;}aboutMe(){console.log(this.skin+' '+this.language+' '+this.positon);} }?
?
轉載于:https://www.cnblogs.com/sarah-wen/p/10811857.html
總結
- 上一篇: 计算机网络上网时间,电脑怎么限制上网时间
- 下一篇: 计算机画面的音乐素材,音效素材:高科技用