javascript學習總結

來源:互聯網
上載者:User

標籤:

1. js中的函數

1.1 函數定義的方法有三種

第一種:

function box(num1, num2){

????????????return num1 + num2;????????

????????}

第二種:

????????var box = function(num1, num2){

????????????return num1 + num2;

????????}

第三種:

????????var box = new Function(‘num1‘, ‘num2‘, ‘return num1+num2;‘);

那麼函數到底是什麼呢?

我們可以alert(box) 列印出的函數整個聲明

alert(typeof box); 列印出的是 function ,表明是一個fucntion 對象。

2. applay 和 call

是每一個函數所擁有的兩個方法,使用他們可以擴充函數的執行作用與。

同時每一個函數內部可以應用的內建對象由:this和arguments,第一個代表函數執行的作用與。第二個是函數的參數。

函數也是對象,所以函數也有屬性和方法。每一個函數都包含兩個屬性:

length 和 prototype 。其中length標識函數希望接受的具名引數的個數。

prototype 屬性,儲存蘇偶有執行個體方法。prototype有兩個方法 apply 和call

3. 在js中如何建立一個對象

3.1 直接使用 new Object

var obj = new Object();

obj.name = "jack";

obj.age = 19;

obj.sayHello = function(){

????alert("hello i‘am " + this.name);

}

這種做法雖然可以,但是當我們要建立大量的相同類型的對象時,就要寫相同的代碼,服用性非常差。

3.2 使用Factory 方法:

function createObject(name, age){

????var obj = new Object();

????obj.name = name;

????obj.age = age;

????obj.sayHello = function(){

????alert("hello i‘am " + this.name);

????}

????return obj;

}

此時我們就可以使用這種方法,建立大量的相同對象,但是,存在一個問題,就是 這樣建立的對象,無法進行類型識別。他們都是Object類型。所以在實際使用中非常不安全。

3.3 建構函式

function User(name, age){

????this.name = name;

????this.age = age;

????this.sayHello = function(){

????alert("hello i‘am " + this.name);

????}

}

上面的函數和Factory 方法的代碼非常相似,但是,他沒有 new Object,而是直接使用this。這中函數就是建構函式,他的使用方法是:

var user = new User(‘tom‘, 19);

同時我們可以使用 instanceof user 來識別其類型:是 User.

所以使用建構函式可以對對象進行類型識別。

但是,這種方法同樣存在一個問題,就是對於sayHello函數,每一個new出來的對象都有一份sayHello函數的拷貝。這樣就造成大量記憶體的浪費。所以我們這種方法還有待改進

3.4 使用全域函數來改進對象函數

function User(name, age){

????this.name = name;

????this.age = age;

????this.sayHello = sayHello;

}

function sayHello(){

????alert("hello i‘am " + this.name);

}

這樣的話,對於每一個new出來的對象。sayHello函數都只有唯一的一份拷貝,節省了記憶體。但是這樣做還是存在一個問題。就是sayHello函數也可以當作全域函數直接被使用,當其被直接使用是,this指標就是執行window域。其行為是未定義的,不可知的。其實從對象封裝的角度觸發,這樣的方法是破壞了對象的封裝,所以這種方法也不行。

javascript學習總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.