zoukankan      html  css  js  c++  java
  • js里的原型

        <script type="text/javascript">
            function People(name){
                this.name = name;
                //对象方法
                this.introduce = function(){
                    alert("My name is "+this.name)
                }
            }
            //类方法
            People.run = function(){
                alert("I can run");
            }
            //原型方法
            People.prototype.introduceChinese = function(){
                // alert("我的名字是"+this.name);
                this.introduce();
            }
    
            var p1 = new People("WindKing");
            // p1.introduce();
            People.run();
            p1.introduceChinese();
    
    // javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
    
    // A.prototype = new B();
    
    // 理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例
    
            function baseClass(){
                this.showMsg = function(){
                    alert("baseClass::showMsg")
                }
            }
            baseClass.prototype.showMsg2 = function(){
                alert("baseClass::showMsg2")
            }
            function extendClass(){}
            extendClass.prototype = new baseClass();
            var instance = new extendClass();
            instance.showMsg();
            instance.showMsg2();
        </script>

     原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。

    javascript的方法可以分为三类:a 类方法 b 对象方法 c 原型方法

    1、对象方法理解就很简单了,主要是如果类生成一个实例,那么该实例就能使用该方法
    2、类方法,不需要通过生成实例就可以使用的方法
    3、原型方法主要是用来对JS已有的系统对象进行扩展而生的,例如Array数组没有什么方法,你可以为其增加原型方法,那么创建的数组就拥有了该方法。

    1、对象方法包括构造函数中的方法以及构造函数原型上面的方法;
    2、类方法,其实这里的类就是一个函数,在js中由于函数也是一个对象,所以可以为函数添加属性以及方法,这种方法在node中用的比较多;
    3、原型方法一般用于对象实例共享,比如Person.prototype.sayName=function(){console.log(this.name);};在原型上面添加该方法,就能实现共享。这样就不用每一次初始化一个实例的时候,为其分配相应的内存了。

    用java中类的方法思维去考虑的话,楼主说的“类方法”指的是“静态方法”,而“原型方法”则指的是“实例方法”,静态方法不可以被继承,也不能被重写,类加载时便加载了;而实例方法,则在实例化后加载。如果一个方法经常被调用,并且与自身的对象没有什么关系,就用静态方法;如果一个方法在必然使用它的情况下才需要调用,就用实例方法。

    javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。

    A.prototype = new B();

    理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。

  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/as3lib/p/5120752.html
Copyright © 2011-2022 走看看