zoukankan      html  css  js  c++  java
  • javascript面向对象的理解(一)

    第一次在园子发文:

    关于js面向对象的理解:

      工厂方式是什么?构造函数是什么?原形链?对象的引用?

    1.对象是什么?

    在js接触的比较多的就是对象了,比如: 

     1 var arr = [];
     2 
     3 arr.number = 10;    //对象下面的变量:叫做对象的属性
     4 
     5 //alert( arr.number );
     6 //alert( arr.length );
     7 
     8 arr.a= function(){  //对象下面的函数 : 叫做对象的方法
     9     alert(123);
    10 };
    11 
    12 arr.a(); // 123

    通过 new Date() new String() 可以创建一个个对象。

    2.工厂方式是什么?

    //工厂方式 : 封装函数
    
    function createPerson(name){
        //1.原料
        var obj = new Object();
        //2.加工
        obj.name = name;
        obj.showName = function(){
            alert( this.name );
        };
        //3.出厂
        return obj;
        
    }
    
    var p1 = createPerson('小明');
    p1.showName();

    通过工厂方式,不需要new 一个函数,直接在函数内部创建一个新的对象,通过给新对象加属性和方法,然后抛出。缺点是:不够灵活。

    3.构造函数是什么?

      

    function CreatePerson(name){
        
        this.name = name;
        this.showName = function(){
            alert( this.name );
        };
        
    }
    
    var p1 = new CreatePerson('小明');
    p1.showName();

    通过在函数外部new 一个函数,实例化了一个对象就是构造函数(一般函数名遵循大写)。在函数内部this就指向了这个实例化的对象,而不是指向window。属性和方法都挂载到了实例化的对象上面去了。缺点:每个方法都挂载在新创建的实例化对象上面,如果需要实例化很多对象,就造成了性能浪费。 

    特别注意: 

    p1.showName() == p2.showName();//false 因为如上,方法在每个实例化对象上面,为了解决这个问题,出现了在原型上面加方法。

    4.对象的引用:

    //example 1:
    
    var a = [1,2,3];
    var b = a;  
    b.push(4);
    alert(b);    //1,2,3,4;  // b没有被赋值,只是把引用指向给了a,修改b就是修改a的值
    
    //example 2:
    
    var a = [1,2,3];
    var b = a;
    b = [1,2,3,4];
    alert(a); // 1,2,3 //虽然一开始b引用指向了a,但是后来b被赋值了,重新开创了内存单元,赋值成了[1,2,3,4],结果就没有影响a
    // 对象类型:复制不仅仅是值的复制,也是引用的传递
    
    //example 3:
    var a = [1,2,3];
    var b = [1,2,3];
    alert(a == b);  // 对象类型 必须值和引用都相同才等于

    5.原型:

    function CreatePerson(name){
        
        this.name = name;
    }
    //在构造函数原型上添加方法 CreatePerson.prototype.showName
    = function(){ alert( this.name ); }; var p1 = new CreatePerson('小明'); p1.showName(); var p2 = new CreatePerson('大白'); p2.showName(); alert(p1.showName() == p2.showName()) //true
    //给数组原型添加方法:
    
    Array.prototype.sum = function(){
      var result = 0;  
      for(var i = 0; i<this.length; i++){
           result += this[i];         
        }
      return result;
    }
    arr = [1,2,3];
    alert(arr.sum()); //6
  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/Aralic/p/4391023.html
Copyright © 2011-2022 走看看