ZF总结:0102 javascript面向对象之原型继承和借用构造函数继承

原型模式,解决了复用问题;

原型继承:一般原型会借用构造函数继承;

 

function Person(name){
this.weight=7;
this.height=40;
this.skin="yellow";
this.gender="random随机";
this.name=name;
this.age=0;
};
Person.prototype.eat=function(){console.log("天生就会吃")};
Person.prototype.cry=function(){console.log("天生就会哭")};
function FE(){

};

FE.prototype=new Person();
FE.prototype.writeCSS= function () {
console.log("我会写CSS")
};
FE.prototype.writeJS= function () {
console.log("我会写JS")
};
var tom=new FE;
tom.writeCSS();
var rose=new FE;
var jack=new FE;
jack.eat();//继承了

JS继承是基于原型链的;

QQ图片20150824235103

~

JS中,prototype的作用是什么?

每一个函数上都有一个prototype属性,当函数作为一个类用的时候,才有意义;它保存了所有这个类的共享方法;这些方法解决了每个实例相同方法的复用问题;

JS中prototype属性和__proto__属性有什么不同?

prototype是函数上的,__proto__是实例上,但是他们指向同一个内存地址;

什么叫原型链

方法实例上方法运行时的查找顺序;

JS中的继承是怎么实现的;

 

/*原型继承*/
FE.prototype=new Person;//第一种继承
FE.prototype.__proto__=Person.prototype;//第二种继承,思考这种继承行不行?

FE.prototype=Person.prototype;//这种的不是继承。因为他们公用一个了; 这个是错误的

~

构造函数继承:使用call,让别的函数里面的this关键字,指向新函数中的this;

cll是function的方法;由一个function来执行,作用是使这个function执行并且让这个function里的this执行call里面的第一个参数;call方法后面的参数是传给function的;

//借用构造函数模式,使用call
function Person(name){
this.weight=7;
this.height=40;
this.skin="yellow";
this.gender="random随机";
this.name=name;
this.age=0;
};
Person.prototype.eat=function(){console.log("天生就会吃")};
Person.prototype.cry=function(){console.log("天生就会哭")};
function FE(name,age,degree){
//Person(name);//当前FE这个函数的thisFE的实例;
Person.call(this,name);
//call,apply这两个方法是定义在FUnction.prototype上的;
this.age=age;
this.degree=degree;
};
FE1=new FE("broszhu",25,"dazhuan");
console.log(FE1);

浏览器输出如下:

QQ图片20150825102251

~~~~

未经允许不得转载:朱邦邦的博客 » ZF总结:0102 javascript面向对象之原型继承和借用构造函数继承

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址