constructorプロパティを使ってみる

More than 3 years have passed since last update.

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;
});