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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

es6 class extends

發布時間:2024/4/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es6 class extends 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Class和普通構造函數有何區別 JS構造函數 function MathHandle(x, y){this.x = x;this.y = y; } MathHandle.prototype.add = function () {return this.x + this.y; } var m = new MathHandle(1,2); console.log(m.add());

第一塊是構造函數,第二塊是構造函數的一個拓展,下面是將構造函數實例化,最后調用add方法,因為這個原型擴展之后,每個實例都會有這個方法。

typeof MathHandle // true MathHandle.prototype.constructor === MathHandle // true 每個構造函數都有一個prototype,顯示原型,prototype默認都有constructor屬性,這個屬性指的就是這個構造函數本身 m.__proto__ === MathHandle.prototype // true 所有實例都有一個隱式原型,這個隱式原型等于構造函數的顯示原型。這個是寫js構造函數的必備基礎

?

Class基礎語法 class MathHandle{constructor(x,y){this.x = x;this.y = y;}add() {return this.x + this.y;} } const m = new MathHandle(1,2); console.log(m.add());

constructor是一個構造器,每個class都有一個constructor。es6中,用class來專門做構造函數的語法其實是有點模擬java,c#的語法,讓初學者或后臺熟悉一點。下面的add相當于在原型中定義add方法。這里定義class的方法跟js構造函數相比,更加簡單。constructor在new的時候立馬會執行。

?

typeof MathHandle // "function"

本質上是個函數,明明沒有寫function,所以js中本身是沒有class的,所以這個class的本質是函數

MathHandle === MathHandle.prototype.constructor // true

跟js構造函數本質是一樣的,這是語法糖。

m.__proto__ === MathHandle.prototype // true

m的實例也是等雨構造函數的顯示原型

js的原理知識,能對上class的原理知識,一摸一樣

?

語法糖 這兩種寫法本質是一樣的,這種語法糖形式,和實際原理看起來不一樣了,形式上模擬java c#,這樣卻失去了他的本性。所以不繼續學習就不知道本質是什么東西。class可以提高初學者,后端的學習成本。但是前端需要知道本質

?

繼承

?

// 動物 function Animal() {this.eat = function(){console.log('animal eat')} } // function Dog() {this.bark = function () {console.log('dog bark');} } // 綁定原型,實現繼承 Dog.prototype = new Animal(); // 哈士奇 var hashiqi = new Dog();

繼承就是抽象到具象的過程,從高級到低級的一個關系,首先有一個animal,動物是抽象的,然后是狗,再往下是哈士奇,哈士奇是一種狗。每個animal都有eat,動物都要吃。dog有個bark,叫。這兩個構造函數比較簡單,就是兩個函數,里面有個屬性。重點是我們把Dog的顯示原型賦值成new Animal()。new Animal是出實話一個animal的實例。這樣就實現了繼承。再去new Dog(),肯定有bark的方法,執行了賦值之后,也有了eat的方法。

hashiqi.bark(); hashiqi.eat(); 這是js的繼承



class Animal{constructor(name){this.name = name;}eat() {console.log(this.name + ' eat')} } class Dog extends Animal {constructor(name) {super(name);this.name = name;}bark() {console.log(this.name + ' bark');} } const dog = new Dog('哈士奇'); dog.bark(); dog.eat();

Dog.prototype = new Animal() 相當于 class Dog extends Animal。后面跟java非常相似。這樣已經繼承了原型方法,不用再寫.prototype這種。。super(name),也就是說在執行Dog的構造器的時候,我先把Animal的構造器執行一遍。Animal這個構造函數對應 class Animal。Dog這個構造函數,對應 class Dog。

?

轉載于:https://www.cnblogs.com/wzndkj/p/10958451.html

總結

以上是生活随笔為你收集整理的es6 class extends的全部內容,希望文章能夠幫你解決所遇到的問題。

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