constructorプロパティについては以下のページが分かりやすかったです。
Object.prototype.constructor
実際に使ってみる
constructorプロパティについてなんとなく理解したところで、前回の宿題を解いてみる。
宿題
js
sum(1,2,3,4,5,"test",[],10,"xxx",false,3,true);
みたいに文字列、配列、真偽値などが入ったときに、
数字は足して、真偽値のときは×2する
のをconstructorプロパティを使ってなんとかする(result:106になったら正解)
解答
js
var sum = function(){
var total = 0;
for (var i=0 ; i<arguments.length ; i++){
if(arguments[i].constructor == Number){
total += arguments[i];
}else if(arguments[i].constructor == Boolean){
total *= 2;
}
}
return total;
}
var result = sum(1,2,3,4,5,"test",[],10,"xxx",false,3,true);
console.log("result: " + result); //result:106
前回コメントいただいた、nullチェックやtypeofを使ってなんとかするのを今度やってみます
ユーザ定義のコンストラクタ関数でも同様に動作する
js
function aClass () {}
var aInstance = new aClass();
aInstance.constructor === aClass //true
aInstance.constructor // function aClass () {}
次回までの宿題
(e)の使い方がよくわからなかったので、理解を深めるために以下の問題に挑戦です。
↓を実行してクリックした対象のconstructorがHTMLDivElementのときにconsole.log("success");を実行する
js
document.body.addEventListener("click", function (e) {
// -- 解答ここから
// -- ここまで
e.preventDefault();
e.returnValue = true;
});