关于JS的原型与继承笔记

1.什么是原型?

原型就是公用的方法或者属性。
1.prototype本质上还是一个JavaScript对象;
2.每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数
3.通过prototype我们可以扩展Javascript的内建对象;
原型的属性和方法是被共享的
只要原型上的属性或者方法被改了, 实例上的也会发生改变;

2.prototype与constructor

其实在JS中构造器就是函数,函数就是构造器,对象实例就是通过var obj=new 函数();这种形式新建出来的实例。

区别这些,在说prototype和constructor。从上面的英文中可以看出,prototype是个对象,里面定义了一个constructor,
那么我们可以推论出,constructor是对象实例的属性!而不是函数(构造器)的属性。
反过来,prototype是函数(构造器)的属性,而不是实例的属性!

constructor始终指向创建当前对象的构造函数,即  构造函数.prototype.constructor 

每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数

代码例子:

function Duck( name ,word) {
            this.name = name;
            this.word = word;
        };
        Duck.prototype.say = function() { //这里的say方法是实例的方法  Duck.say是无法访问的,必须是Duck的实例对象才可以访问  例如下面的duck;
            console.log( this.name+" say : " + this.word )
        };
        Duck.run = function(){        //类方法   可以直接通过Duck.run访问,但是实例对象duck无法访问;
            console.log("T can run at a good pace");
        }
        
      
      function Person(name){   //这里的this代表的是Person类的实例  所以Person.desc,Person.name,Person.eat都是undefined;必须要new Person实例,通过实例才可以访问 例如下面的p;
        this.desc=‘测试类‘;
        this.name=name;
        this.eat = function(){
            console.log(this.name);
        }
        Person.prototype.sleep = function(){    //eat,sleep均是实例对象的方法,区别是:写在prototype上的sleep只需要实例化一次,其他实例可以共享,
                                                //而eat方法在每个对象实例化的时候都会执行,从而加大了内存空间;
                console.log("sleep");
        }
        
      }
      var duck = new Duck("nono","hehe");
      var p= new Person(‘zhangsan‘);
      var p2 = new Person(‘lisi‘);
      console.log(p.eat===p2.eat);//false
      console.log(p.sleep===p2.sleep);//true
      alert(p.constructor);//constructor始终指向创建当前对象的构造函数  即构造函数.prototype.constructor       这里输出Person构造函数的全部内容
     alert(Person.prototype.constructor)//输出Person构造函数全部内容   即每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。