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的实例。

你可能感兴趣的:(js里的原型)