js继承~[[9]]

来源:互联网 发布:淘宝粉丝福利购入口 编辑:程序博客网 时间:2024/05/21 17:56

js的继承  js咋继承?

任务:

/* 任务1:原型继承链, 继承腾讯面试题js两条狗,一开始"汪汪"的叫后台变异:变成"呜呜"通过继承达到目的*/

首先创造对象:

function tiger(){this.bark=function(){alert('百兽之王');}}var hu = new tiger();hu.bark;
/*在jsva中应该然tiger继承猫类,但是js做不到如何让老虎有猫的属性呢?*/***对tiger函数说 , 用cat猫对象来为原型  然后老虎就有猫的功能。
再创建一个:   为了让老虎会爬树,搞一个猫的对象  --- 照猫画虎 // 原型就是 原来要继承的东东

function cat(){this.climb = function(){alert('会爬树');}}var bosimo = new cat();hu.bark();  // 老虎叫一下bosimo.climb(); //猫爬树   但是  hu.clibm()  会报错, 因为还没有继承, 老虎爬不了树

怎么继承:?

proto =>  原型;样机;典型

tiger.prototype = new cat();   // 继承了var dbhu = new tiger();   // 创建新老虎dbhu.climb();    // 会爬树了
console.log(dbhu);   __proto__ 这个原型对象指向了cat猫


发生了什么?1.  构造新对象dbhu{}2. dbhu.bark = function(){}3. dbhu.__proto__ = tiger.prototype  /***关键






那么, 猫的原型是谁呢?

             以前的老虎的原型是谁?

原型,原型,原型l.....是谁?  但凡是个对象就会有原型:

console.log(cat.prototype);



construct  构造函数

console.log(cat.prototype.constructor);



各种找



console.log(cat.prototype);  // 空对象, 显示为catconsole.log(cat.prototype.constructor);   // 因为原型对象是constructor指向的cat, 所以显示为catconsole.log(cat.prototype.__proto__);  // 空对象  Objectconsole.log(cat.prototype.__proto__.__proto__);  // 为null

对象-->原型-->原型的原型-->Object对象-->NULL




最后 让一个猪会爬树:

Object.prototype.sing=function(){alert('会爬树');}function pig(){this.eat = '12KG';}var p = new pig();pig.sing();










最上面的面试题:

<script> function Dog(){this.bark = function(){alert('往往');}}function peter(){this.fire = function(){alert('第一斗犬');}}// 原型继承peter.prototype = new Dog();var huzi = new peter();huzi.bark();function byDog(){this.eat = function(){alert('会吃,会吹');}}byDog.prototype = new Dog();byDog.prototype.bark = function (){alert('呜呜呜')}   // 改变了prototype的属性var by = new byDog();by.bark();</script>


除了原型继承还有其他的办法:

如:原型冒充,或者赋值继承

原型冒充:

function Cat(leg,tail){this.leg = leg;this.tail = tail;this.cilmb = function(){alert('我会爬树');}}function Tiger(leg,tail,color){// 把要继承的类的语句拿来执行一边// this.parent = Cat;  // 把父类构造函数引入到parent属性上this.parent.apply(this,arguments)  // 执行一边delete this.parent;this.color = color;}var tiger = new Tiger(4,1,'yellow');console.log(tiger);tiger.cilmb();/* 用tigger造对象时,用tigger的语句影响一个空对象{}tigger影响空对象前,先用cat函数使之一下娘因此,最后是由tigger和cat两者共同作用过的对象*/

复制继承:


<script> /*就是把父对象的属性,直接复制到自己的对象上*/function Cat(leg,tail){this.leg = leg;this.tail = tail;this.climb = function(){alert('爬树');}}function Tiger(color){this.color = color;this.extend = function(parent){for(var k in parent){// console.log(k);this[k] = parent[k];}}}var hu = new Tiger('color');// hu.climb();  报错hu.extend(new Cat(4,1)); // 动态改变hu.climb();  // 然后就会了console.log(hu);</script>




0 0
原创粉丝点击