• JavaScript学习笔记——对象知识点


    javascript对象的遍历、内存分布和封装特性

    一、javascript对象遍历

    1.javascript属性访问
    对象.属性
    对象[属性] //字符串格式

    //javascript属性的访问方法
       var ren ={};
       ren.name="张三";
       ren.sex="男";
       ren.eat=function  () {
          alert("吃饭");
       }
       alert(ren.name);
       alert(ren["name"]);

    2.javascript属性遍历
    for in

     //javascript属性遍历
     var ren ={};
       ren.name="张三";
       ren.sex="男";
       ren.eat=function  () {
          alert("吃饭");
       }
    
      for (var i in ren) {
         alert(ren[i])
      }

     通过arguments来遍历传入的参数

        function myArray () {
        var lengs=  arguments.length;
         for (var i=0; i<lengs; i++) {
            this[i]=arguments[i];
         }
        }
      var arr=new myArray(1,2,3);
      alert(arr[0]);


    二、内存分布


    三、对象的特性之封装
    把对象所有的组成部分组合起来,尽可能的隐藏对象的部分细节,使其受到保护。
    只保留有限的接口和外部发生联系。

      一、工厂函数

         //工厂函数
        function dianshi (color,size,brand) {
          var Tv={};
         Tv.color=color;
         Tv.size=size;
         Tv.brand=brand;
         Tv.look=function  () {
            alert("看电视");
         }
         Tv.play=function  () {
            alert("玩游戏");
         }
         Tv.dvd=function  () { 
            alert("DVD");
         } 
           return Tv;
          }
    
        var ds=dianshi("red","30inch","sony");
        //alert(typeof ds)
        alert(ds.color)
    
        var ds1=dianshi("blue","40inch","changh");
        alert(ds1["size"])

      二、构造函数 

        //构造方法的形式
        function Tv(color,size,brand) {
          this.color=color;
          this.size=size;
          this.brand=brand;
          this.play=function  () {
             alert("玩游戏");
          }
          this.look=function  () {
             alert("看电视");
          }
          this.dvd=function  () {
             alert("DVD");
          }
        }
        var sony=new Tv("red","20 inch","sony");
          alert(sony.color) 

      三、prototype方法

      对原型属性的修改将影响到所有的实例

     //prototype方法
        function Tv(color,size,brand) {
          this.color=color;
          this.size=size;
          this.brand=brand;
          this.play=function  () {
             alert("玩游戏");
          }
        
        }
    
          Tv.prototype.look=function  () {
             alert("看电视");
          }
          Tv.prototype.dvd=function  () {
             alert("DVD");
          }
          Tv.prototype.aaa={name:"张三"};
        var sony=new Tv("red","20 inch","sony");
        var changhong =new Tv("red","20 inch","CH");
    //      delete sony.color
    //      delete sony.play
    //      delete sony.look
    //      alert(sony.color)
    //       alert(sony.play)
    //       alert(sony.look)
    //   sony.look();
    //   changhong.look();
    
    alert(sony.aaa.name="李四");
    alert(changhong.aaa.name);

      四、混合方法

    //混合方式
    function Tv(color,size,brand) {
          this.color=color;
          this.size=size;
          this.brand=brand;
          this.play=function  () {
             alert("玩游戏");
          }
        
         Tv.prototype.aaa={name:"张三"};
    
        }
    
          Tv.prototype.look=function  () {
             alert("看电视");
          }
          Tv.prototype.dvd=function  () {
             alert("DVD");
          }

    javascript对象的继承和Object对象

    对象的一个类可以从现有的类中派生,并且拥有现有的类的方法或是属性,这和过程叫做继承。被继承的类叫做父类或是基类,继承的类叫做子类。

    (一个对象拥有另一个对象的属性和方法)


    优点:

    提高代码的重用性

    提高代码的可维护性

    提高代码的逻辑性


    一、Object对象

    var obj=new Object()

    属性:

      1.constructor
      对创建对象的函数的引用(指针)。

       //1.constructor 
           //对创建对象的函数的引用(指针)
       
         var obj=new Object();
        alert(obj.constructor)


      2.Prototype 原型

      **********************************************
      对该函数对象的对象原型的引用。是函数对象的默认属性

      **********************************************

    //Prototype  
          //对该函数对象的对象原型的引用。
    
         var obj=new fun1();
         function fun1 () {
          this.name="zhangsan";
        }
         alert(obj.prototype)
        alert(fun1.prototype)

      A.对象的共享属性存放到代码段当中。

      B.可以实现继承。

    方法:

      A.hasOwnProperty(property)
      判断对象是否有某个特定的属性,返回true或者false

    alert(obj.hasOwnProperty("name"))

      B.IsPrototypeOf(object)
      判断该对象是否为另一个对象的原型。(用来检测对象的类型)

      var arr=new Array();
      alert(Array.prototype.isPrototypeOf(arr))

      c.运算符
      instanceof

       java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例

    alert(arr instanceof Array)


    二、继承

    1.原型继承

    function person () {
      this.name="张三";
      this.say=function  () {
        alert(this.name)
      }
    }
    
    function student () {
    }
    student.prototype=new person()
    
    var zhangsan=new student ();
    zhangsan.say()

    2.对象冒充的形式
      A.call
      obj1.fun.call(obj2,参数1......)

      B.apply
      obj1.fun.call(obj2,[参数1,参数2....])

      让对象1的方法冒充成对象2的方法。

    //对象冒充
    /*
    function person () {
       this.name="张三";
       this.say=function  () {
         alert(this.name)
       }
    }
    
    function student () {
      this.name="李四";
    }
    var ren=new person ();
    var zhangsan=new student ();
    
    ren.say.call(zhangsan)
    
    */
    function person (name) {
       this.name=name;
       this.say=function  () {
         alert(this.name)
       }
    }
    
    function student () {
     window.person.apply(this,["zhangsan"])
    }
    
    var zhangsan=new student ();
      alert(zhangsan.name)
      zhangsan.say();

      

    对象的继承顺序

    一、对象的继承顺序

    //对象的继承顺序
        Object.prototype.say=function  () {
           alert("我是顶层的方法");
        }
        function person () {
            this.say=function  () {
               alert("我是父类的方法");
            }
        }
    
        person.prototype.say=function  () {
             alert("我是父类原型的方法");
        }
    
        function study () {
        this.say=function  () {
           alert("本身的方法");
        }
           
        }
        study.prototype=new person();
         study.prototype.say=function  () {
           alert("本身原型的方法");
         } 
        var zhangsan=new study ();
        alert(zhangsan.say)


  • 相关阅读:
    【C/C++】Dijkstra算法的简洁实现
    【数学建模】图论方法的数学模型
    【数学建模】模糊数学模型详解
    【数学建模】基于问题的线性规划和混合整数规划求解
    【机器学习】非常全的机器学习资源汇总
    【数据结构】数据结构中的各种树详解
    【数据结构】八大排序算法
    【数据结构】七大查找算法
    【数学建模】MATLAB语法
    【论文阅读】Sequence to Sequence Learning with Neural Network
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4712985.html
Copyright © 2020-2023  润新知