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;
}