资讯专栏INFORMATION COLUMN

javaScript面向对象编程-继承(二)

scwang90 / 2361人阅读

摘要:原型继承原型继承是对类式继承的一种封装,其中的过渡对象就相当于类式继承中的子类,只是在原型式中作为一个过渡对象出现,目的是创建要返回的新的实例化对象。寄生式继承声明基对象通过原型继承方式创建新对象返回拓展后的新对象测试代码

原型继承

原型继承是对类式继承的一种封装,其中的过渡对象就相当于类式继承中的子类,只是在原型式中作为一个过渡对象出现,目的是创建要返回的新的实例化对象。和类式继承一样,父类对象book中指类型的属性被复制,引用类型的属性被共有。

//原型是继承
function inheritObject(o) {
//声明一个过渡函数对象
function F(){}
//过渡对象的原型继承父类
F.prototype = o;
//返回过渡对象的一个实例,该实例的原型继承了父对象
return new F();
}

var book ={
name:"js",
alikeBook:["css","html"]
};
//测试代码
var newBook = inheritObject(book);
newBook.name ="ajax";
newBook.alikeBook.push("new xml book");
var otherBook = inheritObject(book);
otherBook.name ="flash";
otherBook.alikeBook.push("other as book");
console.log(newBook.name);//ajax
console.log(newBook.alikeBook);//[ "css", "html", "new xml book", "other as book" ]
console.log(otherBook.name);//flash
console.log(otherBook.alikeBook);//[ "css", "html", "new xml book", "other as book" ]
console.log(book.name);//js
console.log(book.alikeBook);//[ "css", "html", "new xml book", "other as book" ]
寄生式继承

寄生式继承是对原型继承的第二次封装,并且在封装的过程中对继承对象进行了扩展,这样新创建的对象不仅仅有父类中的属性和方法,而且添加了新的属性和方法。

//寄生式继承var newBook = createBook(book);newBook.name = "js";newBook.alikeBook.push("new");var otherBook = createBook(book);otherBook.name = "bad";otherBook.alikeBook.push("other");
//声明基对象
var book = {
name:"js book",
alikeBook: ["css","html"]
};
function createBook(obj) {
//通过原型继承方式创建新对象
var o = new inheritObject(obj);
o.getName = function () {
console.log(name);
}
//返回拓展后的新对象
return o;
}
//测试代码
var newBook = createBook(book);
newBook.name = "js";
newBook.alikeBook.push("new");
var otherBook = createBook(book);
otherBook.name = "bad";
otherBook.alikeBook.push("other");
console.log(newBook.name);//ajax
console.log(newBook.alikeBook);//[ "css", "html", "new xml book", "other as book" ]
console.log(otherBook.name);//flash
console.log(otherBook.alikeBook);//[ "css", "html", "new xml book", "other as book" ]
console.log(book.name);//js
console.log(book.alikeBook);//[ "css", "html", "new xml book", "other as book" ]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97895.html

相关文章

  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • Javascript面向对象编程):构造函数的继承

    摘要:动物还有一个猫对象的构造函数。这显然会导致继承链的紊乱明明是用构造函数生成的,因此我们必须手动纠正,将对象的值改为。这是很重要的一点,请务必注意如果替换了对象,下一步必然是为新的对象加上属性,并将这个属性指回原来的构造函数。 原文链接 现在有一个动物对象的构造函数。 function Animal() { this.species = 动物; } 还有一个猫对象的构造函数。 fun...

    longmon 评论0 收藏0
  • 重新认识JavaScript面向对象: 从ES5到ES6

    摘要:基于原型的面向对象在基于原型的语言中如并不存在这种区别它只有对象不论是构造函数,实例,原型本身都是对象。允许动态地向单个的对象或者整个对象集中添加或移除属性。为了解决以上两个问题,提供了构造函数创建对象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新认识面向对象 1. JavaScript...

    VishKozus 评论0 收藏0

发表评论

0条评论

scwang90

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<