国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

es6新特性之 class 基本用法解析

2024-05-06 15:34:37
字體:
來源:轉載
供稿:網友

javaScript 語言中,生成實例對象的傳統方法是通過構造函數,與傳統的面向對象語言(比如 C++ 和 Java)差異很大,ES6 提供了更接近傳統語言的寫法,引入了 class(類)這個概念,作為對象的模板。通過class關鍵字,可以定義類。

es6 class 與es5的面向對象的區別:

 1. 寫法不同,使用關鍵字class

 2.當new一個實例,默認有一個constructor方法,且默認返回實例對象(this),也可以返回另一對象

 3.類的所有方法都在prototype屬性上,但是不可枚舉,且每方法結束不能使用分號

 4.類的調用必須通過new 一個實例,且類的內部默認使用嚴格模式

 5.不存在變量提升,必須先聲明,再調用

 6.class的this 默認指向當前類

 7.class 的靜態方法,使用關鍵字static,不需new,直接通過類來調用

 8. 實例屬性和靜態屬性的寫法,實例屬性在類的內部直接使用等式(=)寫法,也可以寫在constructor 方法里,靜態屬性只需在實例屬性前加一個關鍵字static即可

9.類的繼承使用關鍵字extends,繼承機制與es5完全不同,

  es5的繼承原理:先new子類的實例對象this,再通過將父類的方法和屬性添加到子類的this上(parents.call(this))。

  Es6的繼承原理:先創造父類的實例對象this,所以要構造函數constructor()訪問父類的屬性使用this,必須先調用super()方法;再通過子類的constructor()來修改this

10.類的繼承可以繼承原生的構造函數,es5不可以

 1. 一般寫法(es5 與es6)

//一.ES5寫法:function Animate(name){  this.name = name;}Animate.prototype.getname = function(){  console.log(this.name)}var p =new Animate("lity");p.getname();//二.ES6,面向對象的寫法,calss,class Person{  //constructor():構造方法是默認方法,new的時候回自動調用,如果沒有顯式定義,會自動添加  //1.適合做初始化數據  //2.constructor可以指定返回的對象  constructor(name,age){     this.name = name;     this.age = age;  }  getval(){    console.log(`你是${this.name},${this.age}歲`);  }}      var c1 = new Person("lity",20); c1.getval();   

 ES6 的class可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到

注意 :class 類的本質還是一個函數,類本身就指向構造函數。

typeof Person  //functionPerson === Person.prototype.constructor // true

我們使用Object的一些屬性或者方法檢測一下 用es6 寫的實例對象

//1.查看實例對象c1的__proto__是否指向Person的原型(Person.prototype) console.log(c1.__proto__==Person.prototype)//true console.log(c1.__proto__)//原型對象的所有方法 //2.isPrototypeOf:檢測實例對象是否是某個函數的原型  console.log(Person.prototype.isPrototypeOf(c1));//true//3.constructor:查看某個對象的構造函數   console.log(c1.constructor); //4.hasOwnProperty:檢測某個屬性是否是自己的屬性;不是原型對象上的屬性和方法   console.log(c1.hasOwnProperty("name"))//true; //5.in:通過in可以檢測屬性是否在自己中(this)或者是原型中存在    console.log("getval" in c1)//原型上存在,true    console.log("name" in c1)//constructor(自己上存在),true //6.自定義檢測屬性是否是存在    function hasproperty(attr,obj){       return obj.hasOwnProperty(attr)&&(attr in obj);    }    console.log(hasproperty("name",c1));//true;            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 边坝县| 叶城县| 无棣县| 顺昌县| 堆龙德庆县| 辰溪县| 从江县| 都匀市| 石林| 阜阳市| 南溪县| 台州市| 从江县| 青海省| 湘阴县| 防城港市| 都昌县| 浑源县| 丰台区| 孟连| 玉溪市| 宜宾市| 景德镇市| 林甸县| 平凉市| 高青县| 江北区| 当涂县| 嘉义县| 福安市| 隆回县| 镇宁| 巢湖市| 苍山县| 美姑县| 江口县| 开封县| 高碑店市| 高雄市| 株洲市| 台前县|