javascript常用知識点まとめ(絶えず改善)
2012 ワード
一、関数における関数の呼び出しの実現
二、同じクラスを実例化した後、対象間の赋値の影響に注意する.
次のコードのように
/**
*
* : ,
* data
* fn , fn('data1') , , value
* callFn ,
*/
var data = ['data1', 'data2', 'data3', 'data4'];
var fn = function(value) {
if (value === null || value === undefined) {
return false;
}
return function(index) {
return value == data[index];
};
};
var callFn = function(fn) {
var data1 = [];
for (var i = 0, len = data.length; i < len; i++) {
if (fn.call(this, i)) {
data1.push(data[i]);
}
}
return data1;
}
callFn(fn('data1'));
二、同じクラスを実例化した後、対象間の赋値の影響に注意する.
var fn = function() {
};
fn.prototype = {
obj : {
attr1 : 45,
attr2 : 34
}
};
var instance1 = new fn();
alert(instance1.obj.attr1);//45
var instance2 = new fn();
instance1.obj.attr1 = 77;
instance2.obj.attr2 = 66;
alert(instance1.obj.attr1);// 77
alert(instance2.obj.attr1);// 77,
alert(instance1.obj.attr2);// 66
alert(instance2.obj.attr2);// 66
上記の実行結果から、2つのインスタンスオブジェクトが属性objを共有していることが分かります.2つのインスタンスオブジェクトの中の属性共有を実現するには、以下のような形で作成することができます.instance1.obj = {
attr1 : 77,
attr2 : 66
};
instance2.obj = {
attr1 : 34,
attr2 : 11
};
alert(instance1.obj.attr1);// 77
alert(instance2.obj.attr1);// 34
alert(instance1.obj.attr2);// 66
alert(instance2.obj.attr2);// 11
次のコードのように
fn.prototype = {
arr : [11]
};
instance1.arr = [12];
instance2.arr = [34];
alert(instance1.arr);//12
alert(instance2.arr);//34