美文网首页
搞“对象”从来都不简单

搞“对象”从来都不简单

作者: 达摩会武术 | 来源:发表于2019-01-03 17:01 被阅读0次
    1-- 首先对象的两种创建模式,这个两种哈,一种字面量,一种new obj,打死你你也不能忘,要不然单身一辈子。
    第一种:
       var qi=new Object();
    第二种:
      var qi1={}....
    
    2-- 对象的创建分为很多种模式,正如找对象的方法有很一样。
    3-- 工厂模式: 可以无数次的调用这个函数,每次返回一个包含这4个属性的对象。 工厂模式解决了多个相似对象的问题,但是却没有解决对象识别的问题(即怎样知道一个对象的类型,例如Array,Date等等)。
    工厂模式:
     function createObject(name,love,age,words){
        var o = new Object();
        o.name=name;
        o.age=age;
        o.love=love;
        o.words=words;
        o.say=function(){
          console.log(this.words);
    }
    }
    
    4-- 构造函数模式:可以用来创建特定类型的对象。
    构造函数模式:
     function createObject1(name,love,age,words){
        this.name=name;
        this.age=age;
        this.love=love;
        this.words=words;
        this.say=function(){
          console.log(this.words);
    }
    }
    

    构造函数的创建新对象的过程:创建一个新对象 => 将构造函数的作用于给新对象(因此this就指向了这个新对象) => 执行构造函数中的代码(为这个新对象添加属性) => 返回这个新对象。

    构造函数的问题: 每个方法都要在每个实例上重新创建一遍。

    5--原型模式:原型模式的好处就是让所有对象实例共享他所包含的属性和方法--share~︿( ̄︶ ̄)︿!
    原型模式:
     function Co2(){
    };
      Co2.prototype.name="gg";
      Co2.prototype.love="basketball";
      Co2.prototype.age=27;
      Co2.prototype.words="life is beautiful~!"
      var G1=new Co2();
    

    原型对象的理解:只要创建了一个函数,就会有一个prototype的属性指向这个函数的原型对象。 所有的原型对象都有一个constructor属性---是一个指向prototype所在的那个函数的指针。
    实例中创建的和原型中同名的属性,实例的属性会将原型中的同名属性屏蔽掉。

    5-1引申!!重写对象的原型:需要注意的是重写整个原型和在原型上添加方法是不一样的!
    原型被字面量对象重写:
        function Co3(){};
        Co3.prototype={
          name : "gg",
          love : "basketball",
          age : 27,
          words : "life is beautiful~!"
    };
        var G2=new Co3();
    

    上面的代码中我们将函数Co3的原型用字面量对象重写了,结果和上面的原型模式相同,但是constructor的指向不再是Co3,而是object,因为原型对象是通过字面量对象进行重写的;字面量对象哪来的,object造出来的呗,所以重写后的constructor被修改指向了object对象。

    6-- 构造函数和原型的组合模式:构造函数用来定义实例属性,而原型用来定义共享的方法和属性。
    构造函数和原型组合模式:
        function Co4(name,love,age){
          this. name=name;
          this.love=love;
          this.age=age; 
    };
        Co4.prototype={
         constructor : Co4,  
          saywords : "life is beautiful~!"
    };
        var G2=new Co4("kirk","sprots",27);
    
    7-- 动态原型模式:通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型。
            function Person(name, age, job){
            
                //properties
                this.name = name;
                this.age = age;
                this.job = job;
                
                //methods方法
                if (typeof this.sayName != "function"){
                
                    Person.prototype.sayName = function(){
                        alert(this.name);
                    };
                    
                }
            }
    
            var friend = new Person("Nicholas", 29, "Software Engineer");
            friend.sayName();
    

    只有在sayname方法不存在得情况下,才会将他添加到原型中。这里对于原型的修改可以立即在所有实例中得到反映。

    相关文章

      网友评论

          本文标题:搞“对象”从来都不简单

          本文链接:https://www.haomeiwen.com/subject/maxfrqtx.html