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...