函数代码在这里:
函数extend2(子级,父级){
var c=Child.prototype;
var p=Parent.prototype;
//循环Parent中的属性并将其复制到Child
for (p 中的var i){
c[i]=p[i];
};
//uber 属性使子级能够找到父级的属性
Child.uber=Parent.prototype;
}此时,创建父子的构造函数和对象,并调用函数,形成继承关系。
函数Person(){}
Person.prototype.description="人类";
Person.prototype.age=0;
Person.prototype.hobby=["权","钱"]
Person.prototype.say=function(){
return "我的年龄:" +this.age;
}
函数Student(){}
//实现继承关系并调用函数
扩展2(学生,人);
//此时不需要改变constructor属性
Student.prototype.description="学生";
学生.原型.年龄=18;
var Stu=new Student();
console.log(stu.description);//学生
console.log(stu.say());//我的年龄:18
Stu.爱好.pop()
console.log(stu.hobby);//["右"]
var per=new Person();
console.log(per.description);//人类
console.log(per.say());//我的年龄:0
console.log(per.hobby);//["right"]此时就实现了继承的效果,stu可以访问per的属性
如图所示:
属性副本2.png注意:该方法只针对于基本数据类型有效,JS中对象的传递大多数都是引用传递,仅仅是传递对象的地址,子对象修改,父对象中也相应地会改变
对象之间的继承
到目前为止。我们都是通过构造函数来实现继承的
其实我们可以不使用构造函数来实现继承关系,直接使用对象来完成继承关系的建立。
函数代码如下:
函数扩展3(父级,子级){
//如果传入child参数,则外部有一个已知的对象可以给child赋值。
//如果没有传入Child参数,函数会创建一个空对象并返回。这个空对象继承自父对象
孩子=孩子|| {};
for (父级中的var i){
孩子[i]=父母[i];
}
child.uber=父级;
返回孩子;
}现在我们直接创建父子对象并调用函数实现继承。代码如下:
每变量={
description:"人类",
年龄:0,
hobby:["钱","权利"],
说:函数(){
return "我的年龄是:" +this.age;
},
}
函数Student(){}
var Stu=new Student();
//建立继承关系(让已知的对象继承per)
扩展3(每,stu);
Stu.description="学生";
console.log(stu.description);//学生
console.log(stu.age);//0
Stu.爱好.pop();
console.log(stu.hobby);//["钱"]
console.log(stu.say());//我的年龄是:0
console.log(per.hobby);//["钱"]
//子对象访问父对象属性
console.log(stu.uber.description);//人类
//创建一个继承自per的对象
var t=extend3(per);
console.log(t.description);
console.log(t.say());达到孩子继承父母的效果。同时我们也可以通过该函数直接创建子对象。
深拷贝
虽然上面两个方法可以调用函数,但是如果修改对象的值,则直接修改父对象的值,父对象原有的属性会被替换。
extend2和extend3都是浅拷贝
深拷贝:内存拷贝,将内存完整的拷贝一份浅拷贝:引用拷贝,只复制对象的地址如果要实现深拷贝
1. 我们将使用hasOwnProperty() 方法来确定属性是否需要复制。
2.子对象不会影响父对象中的属性值。实现深拷贝的函数代码如下:
函数深度复制(父级,子级){
孩子=孩子|| {};
//遍历父对象属性
for(父级中的var i){
//确定自身的属性
if(parent.hasOwnProperty(i)){
//确定自身的属性
if(/*对象类型*/typeofparent[i]==="object"){
//判断属性是否为数组
子[i]=Array.isArray(父[i]) ? []:{};
//将parent[i]中的属性分配给child[i]
deepCopy(父[i],子[i]);
}别的{
//基本数据类型
孩子[i]=父母[i];
}
}
}
//子级.uber=父级;
返回孩子;
}这次直接创建对象看效果
每变量={
description:"人类",
年龄:0,
hobby:["钱","权利"],
说:函数(){
return "我的年龄是:" +this.age;
},
}
//t 继承自per
var t=deepCopy(per);
//t.description="学生";
console.log(t.description);//人类
console.log(per.description);//人类
t.hobby.pop();
console.log(t.hobby);//["钱"]
console.log(per.hobby);//["Money", "Right"]深浅复制原理
Dark copy.pngt 如果不修改description属性,则默认继承parent属性。同时,如果t修改了数组,则不会影响per的数组值。
原型继承与属性拷贝的混合应用
原型继承和复制继承的混合方法可以以不同的方式继承两个父对象的属性。
首先创建两个对象per 和base 作为父对象
代码如下:
每变量={
description:"人类",
年龄:0,
hobby:["钱","权利"],
说:函数(){
return "我的年龄是:" +this.age;
},
}
var 基数={
姓名:"二雷",身高:180,体重:100,
}混合函数代码如下:
函数扩展(p1,p2){
var 孩子;
var F=函数(){};
F.原型=p1;
孩子=新F();
for(p2 中的var i){
孩子[i]=p2[i];
}
返回孩子;
}创建一个child,看看效果:
var t=扩展(per,基);
console.log(t.name);//二垒
console.log(t.hobby);//["钱", "权利"] 已实现
多重继承
事实上,n个对象的属性也可以通过函数从子对象继承,即子对象可以继承该对象的属性。
要实现该方法,需要使用函数的arguments属性
创建父对象:
//可以继承多个对象的属性并创建多个对象
var per1={
name:"二雷",
}
var per3={
年龄:20,
}
var per5={
身高:180,姓名:"雷",
}
var per6={
重量:100,
}继承函数的创建:
//arguments 类似于数组,它的属性都是当前函数查找到的参数
函数muli(){
var 孩子={};
为(变量我=0;我
OK,本文到此结束,希望对大家有所帮助。
【传承智慧,延续文化:家族与传统的传承之道】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这三个字真简洁明了,一下子就抓住了重点。
有19位网友表示赞同!
感觉很适合探讨一些家族、财产、传统等方面的议题吧?
有13位网友表示赞同!
莫非是关于法律上的继承问题?
有14位网友表示赞同!
也可以是某个艺术作品或文化的传承吧?
有11位网友表示赞同!
让人想起了那些古老的家族秘闻和故事。
有9位网友表示赞同!
或许是讲一个孩子从父母那里学习东西,不断成长的故事 ?
有15位网友表示赞同!
有没有一种可能是关于知识、技能等等的传递呢?
有20位网友表示赞同!
我很好奇这三个字背后隐藏着什么深意呢?
有19位网友表示赞同!
一定是个很有意思的文章吧!
有17位网友表示赞同!
可以从不同的角度去理解继承,比如物质上的继承和精神上的传承。
有19位网友表示赞同!
我期待看到文章中所描述的继承方式!
有15位网友表示赞同!
听起来好像是很引人深思的话题啊。
有18位网友表示赞同!
会不会是某个人的经历写得非常深刻呢?
有16位网友表示赞同!
我喜欢简洁的标题,更容易让人记忆!
有9位网友表示赞同!
希望文章能让我更加了解“继承”的概念。
有9位网友表示赞同!
我觉得这篇标题很吸引人,一定很有趣!
有5位网友表示赞同!
想看看这篇文章里会用哪些词语来阐述继承?
有20位网友表示赞同!
这种主题总是能够引发人们对生命的思考。
有8位网友表示赞同!
"继承"这个词,承载着太多重量啊!
有10位网友表示赞同!
期待阅读文章,了解更多关于继承的故事。
有16位网友表示赞同!