//es6中的類 實際上是建構函式的另一種寫法
class aa
}var b = new aa()
b.dostuff() // "aaa"
/實際上類上的所有方法也都定義到了這個類的prototype屬性上
// 上面等同於
aa.prototype =
}
類上定義的方法是不可列舉的,這個和es5中有所區別。
所以可以使用下面方法
object.getownpropertynames(aa.prototype)
// ["dostuff"]
constructor方法是類的預設方法,定義類的時候,會自動為這個類新增乙個空的constructor方法。
constructor方法預設返回當前的例項物件this,可以用它來返回其他的物件。
class aa
}var b = new aa()
b.dostuff() // "aaa"
//b是aa這個類的例項,b的原型是aa.prototype(也可以說是aa這個類)
類的內部可以使用get和set關鍵字,用來對某個屬性設定訪問函式,攔截該屬性的訪問行為。
class myclass
get prop()
set prop(value)
}let inst = new myclass();
inst.prop = 123;
// setter: 123
inst.prop
// 'getter'
類可以使用表示式的形式定義。
const myclass = class me
};let a = new myclass()
//這個類的名字是me,但是只能在class內部使用,代指當前類。在外部,只能用myclass來引用這個類。
const myclass = class {} //如果類的內部沒有用到類的名字,可以寫成這種形式。
//使用class表示式可以寫出立即執行的class。
const myclass = class me
};myclass.getclassname() //"aaa"
類相當於例項的原型,類上的定義的方法,例項都會繼承。如果在乙個方法前,加上static關鍵字,這個方法就不會被例項繼承,而是直接通過類來呼叫,這就叫做『靜態方法』。
class foo
}foo.classmethod() // 'hello'
var foo = new foo();
foo.classmethod() //這裡會報錯
如果靜態方法中包含this關鍵字,這個this指的是類,而不是例項。同乙個類中,靜態方法可以和非靜態方法重名。父類的靜態方法可以被子類繼承。
例項屬性除了定義在constructor方法中,也可以定義在類的最頂層,此時不需要在例項屬性前加上this。
class foo
}
class foo
foo.prop = 1;
foo.prop // 1 //prop就是foo這個類的靜態屬性
只能在類的內部訪問的方法和屬性,外部不能訪問。
new是從建構函式生成例項物件的命令。es6為new加了target屬性,用來返回new命令作用於那個建構函式。
es6隨手記 物件篇
1.屬性的簡潔表示法 const b 1 const a a function f x,y f 1,2 a 等同於 a function 2.屬性名可以的是表示式,但是要用括起來,然後屬性名表示式不能和簡潔表示法一起用 3.物件的擴充套件運算子.解構賦值 將物件中尚未讀取的屬性,分配到制定的物件上,...
es6隨手記 陣列篇
1.rest引數 形式為 變數名 另外rest引數只能作為引數的最後乙個出現,不然報錯。function a a,b a 1,2,3,4,5,6 2.擴充套件運算子.這種情況為rest引數的逆運算,將引數轉成用逗號隔開的引數序列。後面也可以跟表示式 let a 1,2,3,4,5 console.l...
隨手小記(es6)
在學習前輩阮一峰大神寫的 ecmascript入門 一書的過程中,第九章中講到物件擴充套件時,第一條我就有點看不懂 es6允許直接寫入變數和函式,作為物件的屬性和方法。這樣的書寫更加簡潔。var foo bar var baz baz 等同於var baz 當時我就沒想太多,就這樣過去了,結果在學習...