상권 제2 부 부록 A ES6 중의 Class
.prototype
인용, 위조 다 형, 신뢰성 이 없 는 .constructor
그리고 류 의 본질은 복제 입 니 다. 여 기 는 없습니다. 어떤 것 은 의뢰 일 뿐 입 니 다.class
class Widget {
constructor(width, height) {
this.width = width
this.height = height
this.$ele = null
}
render($where) {
const {
width,
height
} = this
if (this.$ele) {
this.$ele.css({
height,
width
}).appendTo($where)
}
}
}
class Button extends Widget {
constructor(width, height, label) {
super(width, height)
this.label = label
this.$ele = $('
- 没有繁乱的
.prototype
- 可以用super来实现相对多态
- 声明Button时就直接继承了Widget,不用修改
.prototype
- 可以通过extends很自然的扩展对象子类型,甚至是Array之类的内置对象
- 值得注意的是可以声明实例属性,和方法平级,也可以和上例一样挂在this上
class陷阱
首先最大的误解就是不能一味ES6引入了新机制,它仅仅是之前我们写的.prototype
“类设计”的语法糖,本质上它还是个对象。所以声明的类是可以被改的,而且父类改了,子类也被影响,它本质上还是没有实现复制
- class语法有可能出现意外屏蔽
class C {
constructor(id) {
// id id()
this.id = id
}
id() {
console.log('Id: ' + id)
}
}
var c1 = new C('c1')
c1.id() // // TypeError -- c1.id "c1"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.