日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类的创建与继承

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类的创建与继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、類的創建

在面向對象編程中,類(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

總結

以上是生活随笔為你收集整理的类的创建与继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。