• 我的JavaScript笔记--面向对象


       
    单例模式 ??(基于对象,不能批量生产)
     var person = {
                name: "ywb",
                sayHi: function () {
                    alert();
                } ,
                0:'0',
                1 :'1'
      } 
     person.sayHi();
         for (var k in person) {
                //k是属性名
                //得到属性值 person[k]
                alert(k);
                alert(person[k]);
            }
    特点
    1,我们定义的这些属性和值都是对我们当前这个对象的描述
        定义属性名的时候可以用数字,把可以用数字这种形式成为类数组
    2 , 对象的属性之间有可能也是有关联的
    3,通过for in遍历对象的时候,如果有数字的属性名,就先遍历数字
    for in循环中获取对象的属性值,只能用obj[属性名]的方式。
    --------------------------------------------------------------------
    工厂模式
    定义一个方法,方法内部创建一个Object数据类型,然后返回这个对象。
           function factory(name, age) {
                var obj = new Object();
                obj.name = name;
                obj.age = age;
                obj.sayHi = function () {
                    alert("hello," + name);
                }
                return obj;
            }
            var ywb = factory("ywb", 18);
            ywb.sayHi();
    工厂模式所有的对象类型都是一个object
    构造函数模式
    个人理解:更像class一样,创建对象去new一个class
    通过new这种方式,出来的结果是一个实例。
           function person(name, age) {
                this.name = name;
                this.age = age;
                this.sayHi = function () {
                    alert("hello," + name);
                }
            }
            var ywb = new person("ywb", 18);
            ywb.sayHi();
               alert(ywb instanceof Person ); //可以确定ywb是Person的实例
    这时候,这个实例(对象)是谁,this就指向谁。this就是这个实例的上下文in
    因为每一次实例化一个function,都会在内存中存这个function的字符串
    原型模式
    创建一个对象,我们不仅在内存中开辟了空间,将自己私有的键值对存进来,还有个系统自带的属性_proto_。
    在声明function时,它也有一个自己的属性,就是prototype。
    prototype也有_proto_属性
          function factory(age) {
                this.name = "hart";
                this.age = age;
            }
            factory.prototype.sayHi = function () {
                alert("hello," + name);
            }
            factory.prototype.name = "ywb";
            var p1 = new factory(11);
           
            p1.__proto__ = null;
            alert(p1.name);
    如果我们的某个实例想获取类中的prototype上定义的方法和属性,我们的原理是实例中默认的_proto_属性去获取。
    调用一个方法或属性,首先去其私有属性上找,没有找到才去原型链上找。
    Object是所有实例的基类。
    p1.__proto__.name 就是去原型上找而不去属性上找

    如果你觉得我的文章对您有帮助,给点鼓励,谢谢

  • 相关阅读:
    化零为整WCF(5) 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
    使用Aspose.Cell控件实现Excel高难度报表的生成(三)
    Winform开发框架之动态指定数据表
    Winform分页控件之纯分页显示处理
    利用Aspose.Word控件实现Word文档的操作
    代码生成工具之Winform查询列表界面生成
    代码生成工具之界面快速生成
    Winform开发中手写签名的实现
    代码生成工具之数据库表及字段名称转义
    Winform开发框架之通用附件管理模块
  • 原文地址:https://www.cnblogs.com/aqbyygyyga/p/9878005.html
Copyright © 2020-2023  润新知