您的位置:首页 > Web前端 > JavaScript

JavaScript函数部分

2015-11-12 22:52 621 查看
对象:
JavaScript的对象字面表示法允许仅仅列出对象的组成部分就能创建对象。这也是json的灵感来源。所谓的对象字面量就是包含在{}中的多组键值对。

var stooge={
'first_name' : 'jack' ,
'last_name' : 'ma'
};


取对象内的值可以用stooge['first_name']或者是stooge.first_name。
从undefined的对象中取值是违法的,如stooge.name.me ,此时会报TypeError错误。解决办法是用&&,stooge.name&&stooge.name.me,此时返回undefined。
更改对象内的值用stooge.first_name='mark';,如果first_name不存在,则会向对象中添加新的属性。
遍历对象用for或者是for in。

for(var name in stooge){
alert(stooge.name);
}


for in的缺点是遍历对象中的属性是没有顺序的,为了有顺序的输出可以使用for

var names=['first_name ','last_name '];
for(var i=0;i<names.length;i++){
alert(stooge.names[i]);
}


删除对象中的属性用delete。delete stooge.first_name
原型:
每个对象都连接到一个原型对象,并且可以从中继承属性。通过字面量创建的对象都连接到Object.prototype上。原型连接只有在检索时才有用(这个很有用,我们需要知道更改操作不会改变原型中的值),如果检索一个对象的属性,这个对象没有就会检索它指向的原型对象,直到最终的Object.prototype,最后也没有就返回undefined。
函数:
函数就是对象,对象的原型链终点是Object.prototype,函数的原型链终点是Function.prototype。
函数的创建:
每个函数在创建时会附加两个属性,一个函数的上下文,一个是函数实现的代码(函数实现的代码也被称为“调用”属性,当调用一个函数的时候可以看做是调用这个函数的调用属性)。

var add=function(var a,var b){
return a+b;
};


上面就是用字面量创建的函数。通过字面量创建的函数包括一个连接到上下文的连接(就是所谓的闭包)。
函数的调用:
被调用的函数除了接收声明的参数外还会接收this和arguments参数。this的值取决于调用的模式,一共有四种调用模式:方法调用、函数调用、构造器调用、apply调用。
方法调用:

var myObject={
var value=0;
add:function(i){//在这里函数被声明为方法
return this.value+i;//这里的this就是myObject
}
};
myObject.add(2);//这就是函数的方法调用。通过方法调用函数中的this就是所属对象本身。


函数调用:(易错点在这里)
为了说明这点,先进行如下的说明,之后再看一个例子。这里要注意的是,在进行函数调用的时候this指代的是全局的windows,这个问题的直接影响是在函数的内部函数调用时

var i=100;
var MyObject={
i:10,
out:function (value) {
var inFun = function () {
alert(value + this.i);
}
inFun();//这里是函数调用
}
}
MyObject.out(10);//这里是属性(方法)调用


上面的例子中inFun()调用时为函数调用,this指的是windows,因此this.i=100。最终的结果是110。
为了解决上面的问题,可以用下面的方法:

var i=100;
var MyObject={
i:10,
out:function (value) {
var that=this;//在这里将方法调用传来的this先绑定到that属性上,在下面用时就不会发生上面的问题了
var inFun = function () {
alert(value +that.i);
}
inFun();
}
}
MyObject.out(10);


构造器调用:
我不喜欢这种方式的函数调用,对于已经熟悉java的我来说看着觉得很怪,本来将函数赋值给变量就怪了。这里就简单的说说。

var MyOb=function(ss){
var sta;
this.sta=ss;
}
MyOb.prototype.fun= function () {
return (this.sta);
};
var oo1=new MyOb('oo1');//在new的时候会去调用MyOb函数就是这里的关键,这个函数会在背后创建一个对象赋给oo1,MyOb中的this就是这个新创建的对象,也就是oo1
var oo2=new MyOb('oo2');
alert(oo1.fun());//返回oo1,因为每个sta都是保存在对应的对象中
alert(oo2.fun());//返回oo2


  apply调用:这个调用容许我们手动的传递this。


var MyOb=function(){
return (this.sta);//这里的this就是app
}
var app={
sta:"i am ok!"
}
var res = MyOb.apply(app);//在这里手动将app赋值给this
alert(res);


这里函数的调用并没有完,因为上面说了的除了this还有一个arguments参数。线面就看看这个参数有什么作用。


var fun= function () {
var i=0;
var sum=0;
for(i;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
alert(fun(1,2,3,4,5));


正如上面看到的,它是一个包含了传过来参数的数组(底层只是一个类数组)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: