js知識2

對象:
  1.有兩種方式提供調用其他對象的方法:
    call

    apply


  2.獲取具體類型的方式:
  var typeStr=Object.prototype.toString.call(想獲取類型的對象);
  typeStr=typeStr.slice(8,-1);

  3.自定義構造函數:
    function Animal(name,type,barkWay){
this.name=name;
this.type=type;
this.barkWay=barkWay;
    }
    var dog=new Animal("jj","hh",function(){
console();
    });
    優化:爲了處理函數方法中有相同的代碼段 造成資源浪費,要讓所有的函數公用一個函數。
          但是這種方法也有弊端,增加了全局變量,造成結構混亂。
  解決:用原型:
  原型:在創建構造方法的時候,系統會默認關聯一個神祕對象,這個對象爲原型。
        原型中的屬性和方法可以被使用該構造函數創建出來的對象

          原型使用方法:1)利用原型的動態特性給原型對象添加成員
構造函數.prototype.方法名=function(){}
p.方法名();
    2)直接替換原型對象
                  構造函數.prototype={};

                            注意事項:

1.使用對象訪問屬性時,如果在本身內找不到就會去原型中查找但是使用點語法進行屬性賦    值的時候,並不會去原型中查找

                           使用點語法進行屬性賦值時,如果對象中不存在該屬性,就會給該對象新增屬性
    2.若原型中的屬性是引用類型的屬性,那麼所有的對象共享該屬性,並且一個對象修改了該    引用類型屬性中的成員,其他對象也都會受影響
                        3.一般情況下不會將屬性放到原型對象中, 一般情況下原型中只會放需要共享的方法
          4.在使用新的對象替換掉默認的原型對象之後
      原型對象中的constructor屬性會變成 Object
      爲了保證整個  構造函數---原型----對象 之間的關係的合理性
      應做如下操作:
      在替換原型對象的時候,在新的原型對象中手動添加 constructor 屬性
       Person.prototype = {
                         constructor : Person
                        };
  
   4.對象:封裝 繼承(for  in)  多態(強類型有 弱類型沒有)
     for in混入式繼承:在for循環中,可以使用對象的屬性和方法,也可以賦值。
     for(var k in obj1){
obj[k]=obj1[k] //不能使用點的方式
     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章