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