码迷,mamicode.com
首页 > Web开发 > 详细

关于JS的原型与继承笔记

时间:2015-02-05 13:20:33      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

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默认指向这个函数

 

关于JS的原型与继承笔记

标签:

原文地址:http://www.cnblogs.com/itxiaoqiang/p/4274324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!