一, class和自定義型別的區別:
1,類宣告不會被提公升。
2,類宣告的**自動執行在嚴格模式。
3,類的所有方法都是不可列舉的,而自定的方法必須使用object.defineproperty來設定。
4,類的所有方法都沒有[[construct]],因此用new來呼叫會報錯。
5,呼叫類構造器不使用new 會報錯。
6,檢視在類的內部重寫類名會報錯。
二,類的生成器方法
可以使用 symbol.iterator來定義生成器方法,來生成類的預設迭代器。
class iterator*[symbol.iterator]()
} let iter = new
iterator();
for(let i of iter)
這樣每個例項就都可以使用for of來使用。
三, 靜態成員
class中的靜態方法 是直接在方法前加上static關鍵字。
靜態屬性的寫法:
class foo{}foo.a = 1;
console.log(foo.a);
四,繼承
使用extends關鍵字進行繼承。
只要乙個表示式能夠返回乙個具有[[construct]]屬性以及原型的函式,就可以對其使用extends。
function animal(name)animal.prototype.getname = function();
class sheep extends animal
}let sheep = new sheep('yz');
sheep.getname();
上面的animal是es5的構造器,但也滿足上面的要求,因此可以直接使用extends被繼承。
由於extends後可以接受任意的表示式,那麼自然而然也可以建立混入:
const mixin1 =}const mixin2 =
}function
mixin (...mixinobj);
object.assigin(base.prototype, ...mixinobj);
return
base;
}class minxinall extends mixin(mixin1, mixin2)
}
這樣所有minxinall的例項都可以使用 混入物件的方法。 若多個混入的物件有相同的屬性, 則只有最後被新增的屬性會被保留。
使用extends的子類, 也可以繼承父類的靜態成員。
五,super
super只能在子類中使用,如果在沒有extends的類中使用會報錯。
在構造器中,必須在訪問this之前呼叫super();因為super是用來初始化this的。
子類中可以使用super.方法()來訪問原型的方法。
當然,箭頭函式無super。
由於super是用來生成this的, 如果你只是想繼承原型,而對父類的構造器沒興趣, 可以在constructor中不使用super,返回乙個物件即可。
class a}class b extends a
gettwo()
}let n = new
b();
n.getone();
n.gettwo();
六,繼承內建物件與symbol.species屬性
繼承內建物件的 子類, 呼叫內建物件的方法,返回的結果是子類的例項。
比如:
class myarray extends array{}let arr = new myarray(1,2,3,4,5);
let newarr = arr.slice(1, 4);
//按理來說 呼叫了slice之後,生成的應該是陣列,結果返回的newarr卻是 myarray的例項
symbol.species 知名符號被用於 定義乙個能返回函式的靜態訪問器屬性。一般預設擁有symbol.species屬性的型別預設返回的都是this,即自身的構造器。
子類繼承的時候,可以重寫 symbol.species屬性來指定生成的例項屬於何種型別。
七, new.target
在簡單的情況下, new.target就等於本類的建構函式。 這樣的話,可以通過使用new.target來建立乙個抽象基類。 即只能被繼承,自身不能例項化的類。
class animal}}class row extends animal
}let r = new row('yz'); //
正常let a = new animal(); //
丟擲錯誤。
深入理解Objective c中 class的含義
原文 來自 在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是import這兩個被引用類的標頭檔案...
深入理解Objective c中 class的含義
在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是import這兩個被引用類的標頭檔案,另乙個是使...
深入理解Objective c中 class的含義
在objective c中,當乙個類需要引用另乙個類,即建立復合關係的時候,需要在類的標頭檔案中建立被引用類的指標。如 car.h import inte ce car 實現類我們先省略,如果你直接這麼編譯,編譯器會報錯,告訴你它不知道tire和engine是什麼。這時候有兩個選擇,乙個是impor...