zoukankan      html  css  js  c++  java
  • js_03 面向对象

    2.对象和关联数组

      js的对象本质上是一个关联数组, 说白了就是咱python中的字典

      对象的每个实力属性就是一个键值对

      实例方法也是一个键值对, 只不过value值是一个函数

        var Person = function(name, age)
        {
            this.name = name;
            this.age = age;
            this.info = function()
            {
                alert('this is info method')
            }
        }
    
        var p = new Person('zhangjian', 18);
        for (propname in p)
        {
            document.writeln('p 对象的' + propname + '属性值为' + p[propname] + '<br>')
        }

    运行结果

    p 对象的name属性值为zhangjian
    p 对象的age属性值为18
    p 对象的info属性值为function() { alert('this is info method') }

    3. 继承prototype

      js虽然有类和对象的概念, 但是没有明显的继承关系, 所有的类都是object对象的子类

      可以动态的为对象添加属性和方法

      

        //定义一个空对象
        var p = {};
        // 动态的添加属性和方法
        p.name = 'zhangjian';
        p.info = function()
        {
            alert('this is info method')
        };
    
        p.info()

    我们可以在定义类(其实就是个函数)的时候在内部为这个类定义实例方法, 但是这样有两个缺点,

      1.每次实例化一个对象都生成了这样一个函数,容易造成内存泄露

      2. 形成了一个闭包,增大了局部变量的作用范围

    prototype

      为了避免上述情况,通常不建议直接在函数定义中直接为该函数定义方法,而是建议使用prototype属性

      js的所有类都有一个prototype属性,如果为js的prototype属性添加属性,方法,则可视为对所有类的扩展.

    <script>
        var Person = function(name, weight)
        {
            this.name = name;
            this.weight = weight;
            this.info = function () {
                document.writeln(this.name + '<br>');
                document.writeln(this.weight + '<br>');
            }
        }
    
        var zj = new Person('zhangjian', 18);
        zj.info();
      // 通过prototype为Person类添加方法,这个方法会被所有(包括已经创建的对象继承)
        Person.prototype.walk = function () {
            for(;;){
                if (this.weight >= 5)
                {
                    this.weight -= 5;
                    this.info();
                }
                else
                {
                    return
                }
    
            }
    
        };
        zj.walk();
    </script>

    使用prototype对js内建类进行拓展

      例: 为jsArray内建类添加indexof方法,返回输入元素的索引,没有则返回-1

    <script>
        Array.prototype.indexOf = function (obj) {
            ret = -1;
            for (i=0; i<this.length; i++)
            {
                if (this[i] == obj)
                {
                    ret = i;
                    break
                }
            }
            return ret
        }
    
        a = Array(1,2,3,4,5,6);
        alert(a.indexOf(6));
        alert(a.indexOf(7))
    
    </script>

      

  • 相关阅读:
    教你如何开发一个完败Miracast的投屏新功能
    深度评测--安卓免费的银行卡识别SDK,华为 HMS MLKit 和Card IO哪个好?
    别让算法和数据结构拖你职业生涯的后腿
    接入卡片类快服务你必须知道的事情
    手机智眼——智慧视觉
    解放双手的革命——智慧语音
    Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍
    快服务常见TOP3审核雷区,再不过审就要崩溃啦!
    图标新纪元——服务直达
    集成机器学习服务上架华为应用市场指南
  • 原文地址:https://www.cnblogs.com/zhangjian0092/p/11768102.html
Copyright © 2011-2022 走看看