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默认指向这个函数
时间: 2024-10-18 00:58:33