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