標簽:console 作用 return 沒有 asc 方法 square 通過 function
先來復習一下原型對象,原型對象就相當于一個公共的區域,所有同一個類的實例都可以訪問到這個原型對象。當我們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,如果有則直接使用,如果沒有則會去原型對象中尋找,如果找到則直接使用。
我們可以將對象中共有的內容,統一設置到原型對象中。在JavaScript中,class
(類)是原型的語法糖。作用就是把一些公共的方法和屬性定義在class
中,讓所有實例共享這些方法和屬性。
下面舉一個例子來說明 “類” 是如何定義的(摘自阮一峰老師的ECMAScript6入門):
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return ‘(‘ + this.x + ‘, ‘ + this.y + ‘)‘;
}
}
上面代碼定義了一個“類”,可以看到里面有一個constructor
方法,這就是構造方法,而this
關鍵字則代表實例對象。
Point
類除了構造方法,還定義了一個toString
方法。注意,定義“類”的方法的時候,前面不需要加上function
這個關鍵字,直接把函數定義放進去了就可以了。另外,方法之間不需要逗號分隔,加了會報錯。
類的數據類型就是函數,類本身就指向構造函數。下面來說明下為什么說class
是原型的語法糖。事實上,類的所有方法都定義在類的prototype
屬性上面。
class Point {
constructor() {
// ...
}
toString() {
// ...
}
toValue() {
// ...
}
}
// 等同于
Point.prototype = {
constructor() {},
toString() {},
toValue() {},
};
在類的實例上面調用方法,其實就是調用原型上的方法。
class B {}
let b = new B();
b.constructor === B.prototype.constructor // true
constructor
方法是類的默認方法,通過new
命令生成對象實例時,自動調用該方法。一個類必須有constructor
方法,如果沒有顯式定義,一個空的constructor
方法會被默認添加。
class Point {
}
// 等同于
class Point {
constructor() {}
}
new
是從構造函數生成實例對象的命令。ES6 為new
命令引入了一個new.target
屬性,該屬性一般用在構造函數之中,返回new
命令作用于的那個構造函數。Class
內部調用new.target
,返回當前Class
。
class Rectangle {
constructor(length, width) {
console.log(new.target === Rectangle);
this.length = length;
this.width = width;
}
}
var obj = new Rectangle(3, 4); // 輸出 true
需要注意的是,子類繼承父類時,new.target
會返回子類。
class Rectangle {
constructor(length, width) {
console.log(new.target === Rectangle);
// ...
}
}
class Square extends Rectangle {
constructor(length, width) {
super(length, width);
}
}
var obj = new Square(3); // 輸出 false
標簽:console 作用 return 沒有 asc 方法 square 通過 function
原文地址:https://www.cnblogs.com/jishuanghu/p/13357126.html