重学js--函数相关(2)

js中的对象

对象:就是值的集合

创建对象
  • 字面量
  • 构造函数
// 字面量
var cat={};

// 实例化
var cat=new Object();
对象相关操作
var cat={
	"name":"carol",
	"age" : 5,
	"eat" : "fish"
}

// 读取
var name = cat.name;

// 修改
cat.name='yang';

// 删除属性
delete cat.name;
console.log(cat.name); //undefind

// 判断某个属性是否在对象中
console.log('name' in cat);

// 对象的枚举
for(var key in cat){
	console.log(cat[key])
}

什么是函数

一次封装(定义),四处使用(调用)。

函数的定义

  • 字面量
  • 构造函数
// 字面量第一种,可以在函数前面调用它
console.log(fn())
function fn(){
	return 1;
}

// 字面量第二种
// 因为预解析,会报a不是一个函数
console.log(a());
var a=function(){
	return 1;
}

// 构造函数,不建议使用,效率低
var fn=new Function('a','b');

函数的调用

命名函数调用
function fn(){
	return 1;
}
fn()
匿名函数调用
function(){
	console.log(1);
}

// 函数自执行,在函数后面加(),但是不能是function开头
// 为了不是function开头,将函数赋值给变量
var a=function(){
	console.log(1);
}();

// 用()将函数包括起来也就不是function开头了,包括方法有两种,只要不是function开头就可以了
(function(){
	console.log(1);
})()

(function(){
	console.log(1);
}())

// 添加任意字符也可以
!+-~function(){
	console.log(1);
}()
递归调用
  • 5!=54321
  • 4!=432*1
  • 3!=321
  • 5!=5*4!
  • 4!=4*3!
function fn(num){
	if(num<1)return false;
	return num*fn(num-1);
}
fn(5);
方法的调用
var obj={
	add:function(num1,num2){
		return num1+num2;
	},
	// 非法的标识符要用单引号或双引号括起来
	'@':function(){
		console.log('@')
	}
};
obj.add(1,3)
// 非法的标识符的方法的调用要用方括号
obj['@']()
链式调用
var obj={
	add:function(num1,num2){
		console.log(num1+num2);
		// 链式调用的关键
		return this;
	},
	sub:function(num1,num2){
		console.log(num1-num2);
	}
};
obj.add(1,3).sub(3,1)
构造函数的调用
function Person(){
	......
} 
// 调用
new Person()
间接调用
  • call
  • apply
var name='xm';
var person={};
person.name='xh';
person.getName=function(){
	return this.name;
}

// 普通调用,this指向person
person.getName(); //xh

// call方法
// 将this指向window,它就会去取全局变量name的值
person.getName.call(window); //xm

// apply
// 传递一个参数跟call方法的作用完全一样,都只是将this指向window
person.getName.call(window);
  • call与apply的区别
    传递数据的方式不同
function fn(num1,num2){
	return num1+num2;
} 
//普通调用
fn(1,2);

// call 函数中没有用到this,将this指向window其实也没啥意义哈
fn.call(window,1,2)

// apply 传递参数用数组的形式
// 如果我们的数据是数组的形式,用apply很方便
var datas=[2,3];
fn.apply(window,datas);
fn.apply(window,[1,2]);

函数的参数

判断传递的参数的个数

function add(num1,num2){
	if(arguments.length != add.length){
		throw Error('请传入'+add.length+'个参数')
	}
	return num1 + num2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值