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