继承分为2种,一种是原型继承,另一种是构造函数继承;

 

  • 每个函数都有一个原型地址:prototype;这个函数的prototype会开一个新内存;并且prototype会指向这个函数开辟的内存地址;
  • 新开辟的内存地址,天生有两个属性;一个是con和__proto__;
<script>
function person(name){
this.weight=7;
this.height=40;
this.skin="yellow";
this.gender="";
this.name=name;
this.age=0;
}
person.prototype.eat=function(){console.log("天生就会吃")};
person.prototype.cay=function(){console.log("天生就会苦")};

function FE(){}//定义了一个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();
</script>

JS中,prototype的作用是什么?

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

在JS中,prototype属性和__proro__属性有什么异同?

  • prototype是函数上的,__proro__是实例上,但是他们指向同一个内容地址;(好吧,还是过段时间再总结吧)

什么叫原型链;

  • 其实就是总结一下实例上方法运行时的查找的过程;

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

  • 靠原型链继承的,然后XXX????????

看实例:

<script>
function person(name){
this.weight=7;
this.height=40;
this.skin="yellow";
this.gender="";
this.name=name;
this.age=0;
}
person.prototype.eat=function(){console.log("天生就会吃")};
person.prototype.cay=function(){console.log("天生就会苦")};

function FE(){}//定义了一个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();
</script>

下面这两种方式,思考继承行不行?;

FE.prototype= new person;
FE.prototype.__proto__=person.prototype;//思考这样的方式继承行不行;

FE.prototype=person.prototype;//思考这种方式的继承行不行?
FE.prototype.writeCSS=function(){};

上面是原型继承;

*—–下面是继承-构造函数—-

先写一个call用法;

<body>
<div id="div1">我的DIV的innerHTML</div>
<script>
function fn(a,b){alert(this.innerHTML)+a+b}
var innerHTML="window下的innerHTML";
obj={innerHTML:"obj的innerHTML"};
fn(1,2);//此时是弹:window下的innerHTML;
fn.call(div1,3,4);//我的DIV的innerHTML;因为call可以改变this;
fn.call(obj,5,6);//obj的innerHTML;
//call是function的方法,由一个function来执行,作用是使这个function执行并且让function里的this关键字执行call方法的第一个参数;call方法里的后面参数,是传给function的。
</script>
</body>

下面是继承构造函数;

<body>
<script>
function person(name){
this.weight=7;
this.height=40;
this.skin="yellow";
this.gender="";
this.name=name;
this.age=0;
}
person.prototype.eat=function(){console.log("天生就会吃")};
person.prototype.cay=function(){console.log("天生就会苦")};

function FE(name,age,degree){
//借用构造函数继承;
//person(name);
//当前FE这个函数的this是FE的实例;
person.call(this,name);
//call,aplly,这两个方法是定在在Function.prototype上的;
this.age=age;
this.degree=degree;
}//定义了一个FE的空函数;

FE.prototype=new person;
FE.prototype.writeCSS=function(){console.log("我会写CSS了")};
FE.prototype.writeJS=function(){console.log("我会写JS了")};
var tom=new FE;
tom.eat()
</script>
</body>

“““`