zoukankan      html  css  js  c++  java
  • Javascript:原型模式类继承

    原型模式
    每个函数(准确说不是类、对象)都有一个prototype属性,这个属性是一个指针,指向一个对象。
    使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法。
     
    1.原型对象
    (1)当创建一个新函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象。
    (2)默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype属性所在函数  的指针。
    (3)实例的内部包含一个指针,叫[[Prototype]]。不过这个指针对脚本则完全不可见(某些浏览器支持一种__proto__来访问)
     
    2.代码读取属性顺序
     首先搜索对象实例本身,没有则继续搜索指针指向的原型对象。
    例:
      function Person(){
      }
      Person.prototype.name="Javascript";
      var p1 = new Person();
      var p2 = new Person();  
      p1.name="lufeng";
      alert(p1.name);//"lufeng"
      alert(p2.name);//"Javascript"
      
      使用delete操作符可以完全删除实例属性。
     
     
    isPrototypeOf():确定对象之间是否存在prototype关系
    hasOwnProperty():检测一个属性是存在于实例中,还是存在原型中。
    Object.keys()、Object.getOwnPropertyNames():接收一个对象作为参数,返回
     
    一个包含所有可枚举属性的字符串数组。
     
     
    来看个很蛋疼的类继承(某个HTML5游戏框架):
           
            inherit : function(childClass, parentClass) {
                var Constructor = new Function();
                Constructor.prototype = parentClass.prototype;
                childClass.prototype = new Constructor();
                childClass.prototype.constructor = childClass;
                childClass.superclass = parentClass.prototype;
     
                if(childClass.prototype.constructor == Object.prototype.constructor) {
                    childClass.prototype.constructor = parentClass;
                }
            }
    感觉代码看来比较乱,我画了个图:
    原型模式 <wbr>类继承
  • 相关阅读:
    外校培训前三节课知识集合纲要(我才不会告诉你我前两节只是单纯的忘了)
    floyd算法----牛栏
    bfs开始--马的遍历
    (DP 线性DP 递推) leetcode 64. Minimum Path Sum
    (DP 线性DP 递推) leetcode 63. Unique Paths II
    (DP 线性DP 递推) leetcode 62. Unique Paths
    (DP 背包) leetcode 198. House Robber
    (贪心 复习) leetcode 1007. Minimum Domino Rotations For Equal Row
    (贪心) leetcode 452. Minimum Number of Arrows to Burst Balloons
    (字符串 栈) leetcode 921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/4324046.html
Copyright © 2011-2022 走看看