天天看點

JS學習-第四節

使用函數聲明建立一個函數:

  function 函數名([形參1,形參2,形參3])

  {

    語句。。。

  }

  調用的時候:函數名();

使用函數表達式建立一個函數:

  var 函數名=function([形參1,形參2])

  var fun3=function()

    console.log("12345");  

(1)在調用參數時候,可以在()中指定實參,實參将會指派給函數中對應的形參。

(2)調用函數時解析器不會檢查實參的類型和數量,實參可以是任意的類型也可以是一個對象。

var obj={

name:"孫悟空",

age:18,

gender:"男",

address:"花果山"

}

function sayhello(o)

{

console.log(o.name+o.age+o.gender+o.address);

sayhello(obj);

(1)一般函數傳回一個值就行,不需要進行輸出處理。

(2)如果return後面不加值或者無return,就會傳回undefined.

  

  fun(mianji(10));//調用函數,相當于使用函數的傳回值

  fun(mianji);//調用函數對象,相當于直接使用函數對象

函數對象:

(function(){

  alert("12345");

  })();

以上函數立即執行,不需要調用

obj.sayname();//調方法

fun();//調函數

使用for。。in。。語句

for(var n in obj)

  console.log(n);

  console.log(obj[n]);//對象[屬性名]=屬性值;

1,全局作用域

  直接解除安裝script标簽中的js語句中,在頁面打開是建立,頁面關閉時銷毀。有一個全局對象window,它代表的是一個浏覽器的視窗,它由浏覽器建立我們可以直接使用。建立的變量都會作為window對象的屬性進行儲存。建立的函數都會作為window對象的方法進行儲存。

  變量的聲明提前:使用var關鍵字聲明的變量,會在所有的代碼執行之前被聲明。但是如果不用var則不會被提前

  函數的聲明提前:使用函數聲明形式建立的函數function函數(){},他會在所有的代碼執行之前就被建立

  使用函數表達式建立的函數不會被聲明提前。

2,函數作用域

  在函數作用域中可以通路到全局變量

  函數中,不适用var聲明的變量都會成為全局變量

  解析器在調用函數每次都會向函數内部傳遞一個隐含的參數,這個隐含的參數就是this,this指向的是一個對象,這個對象我們稱為函數執行的上下文對象,資料函數的調用方法的不同,this會指向不同的對象

  (1)以函數形式調用時候,this指的是window,比如fun()

  (2)以方法形式調用時候,this指的是目前方法的對象,比如obj.name()

function createperson(name,age,gender)

var obj=new object();

obj.name=name;

obj.age=age;

obj.gender=gender;

obj.sayname=function()

  alert(this.name);

return obj;

 var obj2=createperson("豬八戒",28,“男”);

 var obj3=createperson("孫悟空",29,“男”);

console.log(obj2);

console.log(obj3);

  習慣第一個字母大寫,普通函數直接調用,構造函數需要使用new關鍵字調用

  構造對象建立過程:

  (1)立即建立一個新的對象

  (2)将建立的對象設定為函數中this

  (3)逐行執行函數中的代碼

  (4)将建立的對象作為傳回值傳回

使用instanceof可以檢查一個對象是否是一個類的執行個體

文法:

  對象 instanceof 類名

如果是真傳回true

  所有的對象都是object的對象,所有的對象做instanceof檢查時候都是true。

this情況:

  1,當以函數的形式調用的時候,this是window;

  2,當以方法的形式調用時,調用方法this就是誰;

  3,當以構造函數的形式調用時,this就是新建立的那個對象。

  我們所建立的每一個函數,解析器都會向函數中添加一個屬性prototype。這個屬性對應着一個對象,這個對象就是我們說的原型對象。

  如果函數作為普通函數調用prototype則沒有任何作用,當函數以構造函數的形式調用時,他所建立的對象中都會有一個隐含的屬性。指向該構造函數的原型對象,我們可以通過__proto__來通路該屬性。

  原型對象就相當于一個公共的區域,所有同一個類的執行個體都可以通路到這個原型對象,我們可以将對象中共有的内容,統一設定到原型對象中。

  當我們通路對象的第一個屬性或方法時,他會在對象自身中尋找,如果有直接使用,沒有則去原型裡找。如果還是沒有,則去原型的原型裡面找

  myclass.prototype.a=123;//添加原型屬性a

  var mc=new myclass();

  mc.a;//123

  一會後我們建立構造函數中,可以将這些對象共有的屬性和方法,同意添加到構造函數的原型中。

  使用in 檢查對象中是否含有某個屬性時,如果對象中沒有但是原型中有,也會傳回true。如

  console.log("name" in mc);

  使用hasownproperty()來檢查對象自身中是否含有該屬性,使用該方法隻有當對象自身中含有屬性時,才會傳回true。如

  console.log(mc.hasownproperty("name"));

  console.log(mc.__proto__);

  當我們直接在頁面上列印一個對象時候,事實上輸出的是對象的tostring方法

  如果建立了多個對象,想要多個對象的tostring方法都重寫,我們需要在原形裡面重寫tostring方法。如:

  person.prototype.tostring=function(){

  return "person[name]="+this.name;

繼續閱讀