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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值