JS问题,给对象添加属性和给对象的原型添加属性有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS问题,给对象添加属性和给对象的原型添加属性有啥区别?相关的知识,希望对你有一定的参考价值。

JS问题,给对象添加属性和给对象的原型添加属性有什么区别?

假设有对象objece;

var object = function()
    this.a = 1;
    this.b = 2;

然后我 var obj1 = new object();

这里的obj1就是对象,给对象obj1加一个属性 obj1.c = 3;
但是我再var obj2 = new object();这里的obj2并没有c这个属性;

但是我通过原型的方式加属性c; object.prototype.c = 3;
那么我var obj3 = new object();
obj3就有c这个属性

望采纳!

追问

那我给object.c=3
那var obj3 = new object(); obj3不是同样有c这个属性么?

我是想问object.c=3和object.prototype.c = 3
有啥区别

追答

object.c=3这样同样new出来的还是不会有c这个属性

追问

果然是这样
憋了好久的疑问终于知道了

能解释一下为什么直接写object.c=3时 new不出来么?

跪谢~!!!!!

参考技术A object.c=3 只是在这个对象上添加了属性c
object.prototype.c = 3 是在对象原型链上添加了属性c
通过new运算符构造出的实例的原型链指向构造函数的原型链
参考技术B prototype是对类操作的,相当于把Object重构了,变成了有a,b,c三个属性的类,如果没经过重构,直接new一个obj3,就是只是开辟了一个之后两个参数的Object的内存空间,压根没c属性的内存空间,直接给obj3.c赋值会出错的

给对象添加属性和给对象原型添加属性的区别

举个例子:

var object = function(){

    this.a = 1;
    this.b = 2;
}
然后new一个对象 var obj1 = new object();
 
给对象obj1加一个属性 obj.c = 3;
但是我再var obj2 = new object();这里的obj2并没有c这个属性;
 
但是我通过原型的方式加属性c; object.prototype.c = 3;
那么我var obj3 = new object();
obj3就有c这个属性

以上是关于JS问题,给对象添加属性和给对象的原型添加属性有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

对象的原型包含的属性及其用法1

JS内置对象的原型不能重定义?只能动态添加属性或方法?

JS原型与原型链

js对象4-js原型--杂志

JS入门系列-原型-实例属性

js原型(prototype)和面对对象