ECMAScript 6(24)class基本語法

2021-10-08 12:47:41 字數 4189 閱讀 5378

function point(x, y) 

point.prototype.tostring = function () ;

var p = new point(1, 2);

class point 

tostring()

}var p = new point()

class的關鍵字是全部小寫

class在定義的時候,每個屬性都需要是函式,而不能是變數

class foo 

class foo // error!報錯!

}

建構函式裡可以建立變數和執行本身方法

class point 

tostring()

}

this指向class本身,在new出來之後,是例項本身;

class宣告的類,不能直接呼叫,只能通過new關鍵字來生成例項,如new foo();直接foo()會報錯,foo指的是類本身.這是它跟普通建構函式的乙個主要區別.

類方法之間不能用逗號

class foo  // 這裡加逗號會報錯

add()

}

類有prototype屬性,而constructor掛在在prototype屬性下,並且類的constructor屬性指向類本身;

var f =new foo()

f.constructor === foo // true

foo.prototype.constructor === foo // true

f.constructor === foo.prototype.constructor // true

class point 

}object.assign(point.prototype, ,

tovalue(){}

});

class point 

tostring()

}object.keys(point.prototype)

// object.getownpropertynames(point.prototype)

// ["constructor","tostring"]

var point = function (x, y) ;

point.prototype.tostring = function() ;

object.keys(point.prototype)

// ["tostring"]

object.getownpropertynames(point.prototype)

// ["constructor","tostring"]

class point 

}object.assign(point.prototype, ,

tovalue(){}

});object.keys(point.prototype)

// ["tostring", "tovalue"]

class point 

// 等同於

class point

}

class foo 

}new foo() instanceof foo

// false

var p1 = new point(2,3);

var p2 = new point(3,2);

p1.__proto__ === p2.__proto__ // true

p1.__proto__ === point.prototype // true

class myclass 

get prop()

set prop(value)

}let inst = new myclass();

inst.prop = 123;

// setter: 123

inst.prop

// 'getter'

類和模組的內部,預設就是嚴格模式,所以不需要使用use strict指定執行模式

不存在提公升

generator 方法

class foo 

* [symbol.iterator]()

}}for (let x of new foo('hello', 'world'))

this 指向

class logger `);

} print(text)

}const logger = new logger();

const = logger;

printname(); // typeerror: cannot read property 'print' of undefined

// printname方法中的this,預設指向logger類的例項。但是,如果將這個方法提取出來單獨使用,this會指向該方法執行時所在的環境(由於 class 內部是嚴格模式,所以 this 實際指向的是undefined),從而導致找不到print方法而報錯。

class logger 

// ...

}

class obj 

}const myobj = new obj();

myobj.getthis() === myobj // true

class foo 

}foo.classmethod() // 'hello'

var foo = new foo();

foo.classmethod()

// typeerror: foo.classmethod is not a function

class foo 

static baz()

baz()

}foo.bar() // hello

class foo 

}class bar extends foo

bar.classmethod() // 'hello'

class foo 

}class bar extends foo

}bar.classmethod() // "hello, too"

class foo 

}

class foo 

foo.prop = 1;

foo.prop // 1

class widget 

// 私有方法

_bar(baz)

// ...

}

const bar = symbol('bar');

const snaf = symbol('snaf');

export default class myclass

// 私有方法

[bar](baz)

// ...

};

function person(name)  else 

}// 另一種寫法

function person(name) else

}var person = new person('張三'); // 正確

var notaperson = person.call(person, '張三'); // 報錯

只能在函式內部使用,函式外部直接呼叫會報錯;

當new.target處於類的constructor屬性中時, 指向類本身

class foo 

my()

}var f = new foo() // true

f.my() // undefined

當父類被子類繼承時,父類中的constructor的new.target指向子類(而非父類)。

ECMAScript型別轉換

ecmascript 的 boolean 值 數字和字串的原始值的有趣之處在於它們是偽物件,這意味著它們實際上具有屬性和方法。例如,要獲得字串的長度,可以採用下面的 var scolor red alert scolor.length 輸出 3 儘管 red 是原始型別的字串,它仍然具有屬性 len...

ECMAScript 原始型別

typeof運算子對於null值會返回 object 當宣告的變數未初始化時,該變數的預設值是underfined 值underfined不同於未定義的值。typeof運算子並不真正區分這兩種值 var otemp alert typeof otemp alert typeof otemp2 輸出都...

ECMAScript 引用型別

背好像不那麼痛了 真的是這麼強壯的我!哈哈哈!想想6級ohgod!自從第二次考完之後,我越來越覺得是拼運氣了。其實根本就沒有要認真學認真賺分的樣子。現在才覺得起碼背幾篇作文咯。看得再多篇也不如重複地看一篇!哎哎哎先不說 還想早點 呢!說!昨天學的記了多少!引用型別通常叫做類class 其實,ecma...