《編寫高質量代碼--改善JavaScript程序的188個建議》學習記錄(五)

Js中的對象
(一)原型:
在JavaScript中,對象是沒有原型的,只有構造函數擁有原型,而構造類的實例對象都能經過prototype屬性訪問原型對象。
在JavaScript中,對象應該是類(class)和實例(instance)的關係演化。類是對象的模型化,而實例則是類的特徵具體化,類包含不少概念類型,如元類,超類,泛類和類型等。
例如:
function Class(type){
    this.type = type;
}
var instance1 = new Class("instance1");
var instance2 = new Class("instance2");
使用instanceof運算符能夠驗證它們之間的關係:
alert(instance1 instanceof Class);  //true
alert(instance2 instanceof Class);  //true
instance1 和instance2都是對象,可是Class構造函數不是它們惟一的類型,Object也是它們的類型
alert(instance1 instanceof Object); //true
alert(instance2 instanceof Object); //true
Object 比 Class類型更加抽象,它們之間屬於一種繼承關係。
alert(Class instanceof Object);  //true
可是instance1和instance2對象不是Function構造函數的實例,這說明它們之間沒有直接關係
alert(instance1 instanceof Function); //false
alert(instance2 instanceof Function); //false
而Object和Function之間的關係很是微妙,它們都是高度抽象的類型,互相爲對方的實例
alert(Object instanceof Function);//true,說明Object對象是Function函數的實例
alert(Function instanceof Function);//true,說明Function函數是Object對象的實例
Obj與Function同時也是兩個不一樣類型的構造器,下面的代碼能夠很好展現它們之間的差別
var f  = new Function();
var o = new Object();
alert(f instanceof Function);  //true
alert(f instanceof Object);   //true
alert(o instanceof Function);  //false
alert(o instanceof Object);   //true
(二)對象中的this
  this是一個動態指針。this所指向的對象是由this所在的執行域決定的,而不是由this所在的定義域決定的,this是JavaScript執行域中的一個屬性,它的指針始終指向當前調用的對象。
  this的指向有下列幾種狀況:
  (1)指向當前的DOM對象
  下面這個按鈕定義了一個單擊屬性,其中包含了this關鍵字
  <input type="button" value="點擊" onclick = "this.value='我被點擊'"/>
  其中,onclick時間屬性中包含的this就表明當前DOM對象input
  (2)指向構造函數,在其中使用this關鍵字做爲臨時表明,而後使用new運算符實例化構造函數
  function F(){
     this.name = "hello world";
  }
  var f = new F();
  alert(f.name);
  這裏的this就表明房錢實例對象f
  (3)指向當前對象直接量
  下面是一個對象直接量,它包含了兩個屬性,其中方法me()返回關鍵字this
  var o = {
    name : "我是對象o",
    me : function(){
    return this;
}
var who = o.me();
alert(who.name);
在調用對象直接量o的方法me()後,變量who的值就是this的值,它表明當前對象直接量o,而後讀取對象o的屬性name,返回字符串「我是對象o"
(4)指向全局對象
在函數f()中調用this關鍵字,而且爲this定義並初始化一個屬性name,在調用函數以後,能夠直接讀取屬性name

function f(){
     this.name = "我是誰?";
}

f();
alert(name);
在函數f()中,this實際上就是表明window,實際上,上面代碼能夠寫成以下形式,
window.f = function(){
    this.name = "我是誰?";
}
window.f();
alert(window.name);
(5)指向當前做用域對象
}













函數

相關文章
相關標籤/搜索