日期:2014-05-16  浏览次数:20319 次

javascript常用知识点总结(不断完善)

一、函数中调用函数的实现

?

?

/**
 * 以下为函数中调用函数的实现
 * 具体功能实现:通过传值来查找给定数据中是否存在,并返回存在值的数组
 * 其中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

??从以上运行结果可以看出,两个实例对象共享了属性obj,要想实现两个实例对象中的属性不共享可写成以下形式

?

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
?