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)