Js面向对象整理(二)
【摘要】 本篇记录个人所学Js面向对象整理(二),知识点涉及原型继承、原型链。
Js面向对象整理(二)
构造函数继承
继承:子类继承父类所有属性和行为,父类不受影响。
目的:找到类之间的共性精简代码
原型继承:组合继承
function Cat() { this.leg = "4"; } Cat.prototype.climb = function() { console.log("climb tree..."); } function Tiger() { Cat.call(this); } function Link() { } Link.prototype = Cat.prototype; Tiger.prototype = new Link(); Tiger.prototype.constructor = Tiger; // Tiger.prototype = Cat.prototype; Tiger.prototype.climb = function() { console.log("climb grassy..."); } let tigger = new Tiger(); console.log(tigger); tigger.climb(); let kitty = new Cat(); console.log(kitty); kitty.climb();
原型继承:深拷贝继承
// 自封深拷贝函数 let deepCopy = obj => { let newObj = Array.isArray(obj) ? [] : {}; for(let k in obj) { if(obj.hasOwnProperty(k)) { if(typeof obj[k] === "object") { if(obj[k] === null) { newObj[k] = null; }else{ newObj[k] = deepCopy(obj[k]); } }else { newObj[k] = obj[k]; } } } return newObj; } function Cat() { this.leg = "4"; } Cat.prototype.climb = function() { console.log("climb tree..."); } function Tiger() { Cat.call(this); } Tiger.prototype = deepCopy(Cat.prototype); Tiger.prototype.climb = function() { console.log("climb grassy..."); } let tigger = new Tiger(); console.log(tigger); tigger.climb(); let kitty = new Cat(); console.log(kitty); kitty.climb();
原型链
原型链是指对象在访问属性或方法时的查找方式。
1.当访问一个对象的属性或方法时,会先在对象自身上查找属性或方法是否存在,如果存在就使用对象自身的属性或方法。如果不存在就去创建对象的构造函数的原型对象中查找 ,依此类推,直到找到为止。如果到顶层对象中还找不到,则返回 undefined。
2.原型链最顶层为 Object 构造函数的 prototype 原型对象,给 Object.prototype 添加属性或方法可以被除 null 和 undefined 之外的所有数据类型对象使用。
case1:
function Person() { this.name = "rocky"; } let guy = new Person(); console.log(guy.name); // rocky
case2:
function Person() { // this.name = "rocky"; } Person.prototype.name = "sunny"; let guy = new Person(); console.log(guy.name); // sunny
case3:
function Person() { // this.name = "rocky"; } // Person.prototype.name = "sunny"; Object.prototype.name = "carol"; let guy = new Person(); console.log(guy.name); // carol
END
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)