数码资讯
JS修改原型的特性介绍
在Javascript中的原型(原型)定义的一种特定类型的访问的所有实例的属性和方法,许多情况下需要指定一个值,在样机的性能,如果错误的方法会导致一些意想不到的情况(对于像我这样的新手的正义斗争),下面通过一个简单的这部分知识总结测试。 基本类型定义如下: 复制代码代码如下所示: 函数(人){ }
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在Javascript中的原型(原型)定义的一种特定类型的访问的所有实例的属性和方法,许多情况下需要指定一个值,在样机的性能,如果错误的方法会导致一些意想不到的情况(对于像我这样的新手的正义斗争),下面通过一个简单的这部分知识总结测试。
基本类型定义如下:
复制代码代码如下所示:
函数(人){ }
的人。原型= {
构造函数:人,
姓名:人
年龄:100岁,
好友:{
getName:函数(){
返回this.name;
}
};
定义两个实例的实例并修改实例中的name属性(属性在原型中定义),测试代码如下所示
复制代码代码如下所示:
新的人();
新的人();
document.write(P1。名称+); / /人
document.write(P2。名称+); / /人
P1 =P1;
document.write(P1。名称+); / / P1
document.write(P2。名称+); / /人
(p1.hasownproperty document.write(名称)+); / /真正属于对象
(p2.hasownproperty document.write(名称)+); / /假属于原型
document.write(Object.keys(P1)+); / /名字
document.write(Object.keys(P2)+ ); / /空
document.write(object.getownpropertynames(人。原型)+ ); / /构造函数,名字,年龄,朋友,同
document.write(人。原型。名称+); / /人
P1的测试后。名称=中可以找到P1不修改名字的价值但在P1的实例添加一个名称属性重写的名称属性的原型,从随后的判断可以视为P1名称属性实例的属性,而不是原型的属性,在Object.keys(P1 P1)也可以在这个例子中看到有一名物业并不在P2,JS,所有的传输都是值传递。此值可以是指向引用类型的指针。因此,等号并不意味着修改引用对象,而是切换原始引用关系。接下来,我们将用代码来说明这个问题。
复制代码代码如下所示:
var obj =新的对象();
Obj。名称=目标;
功能changeobj(o){
o.name =改变;
o =新对象();
o.name =newobj ;
}
ChangeObj(obj);
document.write(对象的名字); / /改变
在changedobj方法,O =新的对象()不修改参数的值,但切断了原来的参考,因此不newobj而改变
接下来,在第一个示例中尝试修改原型中的朋友属性,这是一个引用类型。
复制代码代码如下所示:
p1.friends.push(C);
document.write(P1。朋友+); / / A,B,C
document.write(P2。朋友+); / / A,B,C
朋友
document.write(P1。朋友+); / / X,Y,Z
document.write(P2。朋友+); / / A,B,C
(p1.hasownproperty document.write(朋友)+); / /真正属于对象
(p2.hasownproperty document.write(朋友)+); / /假属于原型
document.write(Object.keys(P1)+); / /的名字,朋友
document.write(Object.keys(P2)+ ); / /空
document.write(object.getownpropertynames(人。原型)+ ); / /构造函数,名字,年龄,朋友,同
document.write(人。原型。朋友+); / / A,B,C
这个测试结果与第一次测试基本相同。当它被一个相等的符号修改时,它将切断原始引用并为实例创建一个新的属性,并在原型中覆盖相同的名称属性。
基于这两个测试结果,我们发现原型中的值类型属性在实例中不能直接修改。当然,这个值类型不应该在原型中定义。这里的代码实例只表明知识点是不实际的。
基本类型定义如下:
复制代码代码如下所示:
函数(人){ }
的人。原型= {
构造函数:人,
姓名:人
年龄:100岁,
好友:{
getName:函数(){
返回this.name;
}
};
定义两个实例的实例并修改实例中的name属性(属性在原型中定义),测试代码如下所示
复制代码代码如下所示:
新的人();
新的人();
document.write(P1。名称+); / /人
document.write(P2。名称+); / /人
P1 =P1;
document.write(P1。名称+); / / P1
document.write(P2。名称+); / /人
(p1.hasownproperty document.write(名称)+); / /真正属于对象
(p2.hasownproperty document.write(名称)+); / /假属于原型
document.write(Object.keys(P1)+); / /名字
document.write(Object.keys(P2)+ ); / /空
document.write(object.getownpropertynames(人。原型)+ ); / /构造函数,名字,年龄,朋友,同
document.write(人。原型。名称+); / /人
P1的测试后。名称=中可以找到P1不修改名字的价值但在P1的实例添加一个名称属性重写的名称属性的原型,从随后的判断可以视为P1名称属性实例的属性,而不是原型的属性,在Object.keys(P1 P1)也可以在这个例子中看到有一名物业并不在P2,JS,所有的传输都是值传递。此值可以是指向引用类型的指针。因此,等号并不意味着修改引用对象,而是切换原始引用关系。接下来,我们将用代码来说明这个问题。
复制代码代码如下所示:
var obj =新的对象();
Obj。名称=目标;
功能changeobj(o){
o.name =改变;
o =新对象();
o.name =newobj ;
}
ChangeObj(obj);
document.write(对象的名字); / /改变
在changedobj方法,O =新的对象()不修改参数的值,但切断了原来的参考,因此不newobj而改变
接下来,在第一个示例中尝试修改原型中的朋友属性,这是一个引用类型。
复制代码代码如下所示:
p1.friends.push(C);
document.write(P1。朋友+); / / A,B,C
document.write(P2。朋友+); / / A,B,C
朋友
document.write(P1。朋友+); / / X,Y,Z
document.write(P2。朋友+); / / A,B,C
(p1.hasownproperty document.write(朋友)+); / /真正属于对象
(p2.hasownproperty document.write(朋友)+); / /假属于原型
document.write(Object.keys(P1)+); / /的名字,朋友
document.write(Object.keys(P2)+ ); / /空
document.write(object.getownpropertynames(人。原型)+ ); / /构造函数,名字,年龄,朋友,同
document.write(人。原型。朋友+); / / A,B,C
这个测试结果与第一次测试基本相同。当它被一个相等的符号修改时,它将切断原始引用并为实例创建一个新的属性,并在原型中覆盖相同的名称属性。
基于这两个测试结果,我们发现原型中的值类型属性在实例中不能直接修改。当然,这个值类型不应该在原型中定义。这里的代码实例只表明知识点是不实际的。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。