1. 程式人生 > >js原型鏈

js原型鏈

global 函數 regexp arr 打印 alert 是否 prot 原型鏈

1、自定義函數與 Function的關系:

    ①本地對象:獨立於宿主環境(瀏覽器)的對象——包括Object、Array、Date、RegExp、Function、Error、Number、String、Boolean

   ②內置對象——包括Math、Global(window,在js中就是全局變量),使用的時候不需要new

    ③宿主對象——包括自定義對象、DOM、BOM

     故所有的函數都是 Function 的實例;

2、構造函數、原型和實例的關系:

    ①在構造函數上都有一個原型屬性 prototype,該屬性也是一個對象;

    ②原型對象上有一個 constructor 屬性,該屬性指向的就是構造函數;

③實例對象上有一個 _proto_ 屬性,該屬性也指向原型對象,並且該屬性不是標準屬性,不可以用在編程中,該屬性用於瀏覽器內部使用。

3、prototype與_proto_的關系:

    prototype是構造函數的屬性,_proto_是實例對象的屬性,這兩者都指向同一個對象

4、函數與對象:

    對象的本質:無序的鍵值對集合;鍵值對當中的值可以是任意數據類型的值;

    對象就是一個容器,這個容器當中放的是(屬性和方法)

    故函數也是對象,對象不一定是函數;

5、屬性搜索 

    ①在訪問對象的某個成員的時候會先在對象中找是否存在

  ②如果當前對象中沒有就在構造函數的原型對象中找

  ③如果原型對象中沒有找到就到原型對象的原型上找

  ④知道Object的原型對象的原型是null為止

6、試一試   

    function Foo(){
      getName=function(){
        alert(1);
      };
      return this;
    }

   Foo.getName =function(){
     alert(2);
   }
   Foo.prototype.getName=function(){
     alert(3);
   }
  var getName=function(){
    alert(4);
  }
  function getName(){
    alert(5);
  }
打印:
  Foo.getName();
  getName();
  Foo().getName();
  getName();
  new Foo.getName();
  new Foo().getName();
  new new Foo().getName();

js原型鏈