JavaScript函數部分

 對象:
     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));
正如上面看到的,它是一個包含了傳過來參數的數組(底層只是一個類數組)。
相關文章
相關標籤/搜索