日期:2014-05-16 浏览次数:20411 次
一、函数中调用函数的实现
?
?
/**
* 以下为函数中调用函数的实现
* 具体功能实现:通过传值来查找给定数据中是否存在,并返回存在值的数组
* 其中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
?