zoukankan      html  css  js  c++  java
  • 我的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 就是去原型上找而不去属性上找

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

  • 相关阅读:
    [LeetCode] 909. Snakes and Ladders 蛇梯棋
    [LeetCode] 857. Minimum Cost to Hire K Workers 雇佣K名工人的最低成本
    [LeetCode] 908. Smallest Range I 最小区间
    [LeetCode] 862. Shortest Subarray with Sum at Least K 和至少为K的最短子数组
    [LeetCode] 907. Sum of Subarray Minimums 子数组最小值之和
    [LeetCode] 864. Shortest Path to Get All Keys 获得所有钥匙的最短路径
    [LeetCode] 906. Super Palindromes 超级回文数
    [LeetCode] 871. Minimum Number of Refueling Stops 最少的加油站个数
    [LeetCode] 905. Sort Array By Parity 按奇偶排序数组
    [LeetCode] 1028. Recover a Tree From Preorder Traversal 从先序遍历还原二叉树
  • 原文地址:https://www.cnblogs.com/aqbyygyyga/p/9878005.html
Copyright © 2011-2022 走看看