//1.定義一個方法 method Function .prototype.method=function(name, func){ this.prototype[name]=func; return this; } //2.給Object增長一個create方法,這個方法建立一個使用原對象做爲其原型的新對象 Object.create=function(o){ var F=function(){}; F.prototype=o; return new F(); } //繼承 Function.method(‘inherits’, function(Parent){ this.prototype=new Parent(); return this; });
1)JS中的對象是name/value對的集合並擁有一個連到原型對象的隱藏鏈接。
2)對象字面量產生的對象鏈接到Object.prototype;
3)引用:對象經過引用來傳遞,他們永遠不會被複制。
4)函數就是對象。
5)函數對象鏈接到Function.prototype(該原型的對象自己鏈接到Object.prototype)。
6)函數在建立的時候會附加2個隱藏屬性:函數的上下文(包括函數實參、函數形參、內嵌函數、內部變量等)和實現函數行爲的代碼
Objectjavascript
檢查對象並肯定對象有什麼屬性是很容易的事情,只要試着去檢索該屬性並驗證取得的值,typeof操做符對肯定屬性的類型頗有幫助。
1)檢查屬性的類型:typeofjava
typeof flight.number //'number' typeof flight.status //'string' typeof flight.manifest //'undefined'
請注意原型鏈中的任何屬性也會產生一個值:數組
typeof flight.toString //'function' typeof flight.constructor //'function'
2)檢查屬性:hasOwnPropertyapp
flight.hasOwnProperty('number') //true flight.hasOwnProperty('constructor') //false
1)除了聲明時定義的形式參數,每一個函數還接收2個附加的參數:this和arguments
2)一個函數總會返回一個值,若是沒有指定返回值,則返回undefined。若是函數調用時在前面加上了new前綴,且返回值不是一個對象,則返回this。
函數字面量:能夠經過函數字面量來建立:
包括4個部分:
1函數
//建立一個名爲add變量,並用來把兩個數字相加的函數賦值給它 var add=function(a,b){ return a+b; }
this在JS中有4中調用模式:
①方法調用模式:當一個函數被保存爲對象的一個屬性時,就稱它是一個方法。當一個方法被調用時,this被綁定到該對象。
②函數調用模式:當一個函數並不是一個對象的屬性時,它就是被當作一個函數來調用。這個模式下的this被綁定到全局對象window,函數實際是window的屬性。
③構造器調用模式:若是在一個函數前面帶上new來調用,則背地裏會建立一個連到該函數prototytpe成員的新對象,同時this會被綁定到那個新對象上。
④apply調用模式:容許選擇this的值,apply第一個參數綁定給this的值,第2個參數是傳給調用函數的參數數組。this
繼承的兩個做用:一、代碼重用;二、類型系統規範。prototype
當一個函數對象唄建立時,Functinon構造器產生的函數對象會運行相似下面的代碼:code
this.prototype={constructor:this};
新函數對象被賦予一個prototype屬性,其值是包含一個constructor屬性且屬性值爲該新函數的對象。該prototype對象是存放繼承特徵的地方。對象