欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript对象拷贝与赋值操作实例分析

程序员文章站 2022-03-13 17:03:29
本文实例讲述了javascript对象拷贝与赋值操作。分享给大家供大家参考,具体如下: 今天在做公司面试题的时候,遇到了一道关于javascript之对象拷贝与赋值的问题...

本文实例讲述了javascript对象拷贝与赋值操作。分享给大家供大家参考,具体如下:

今天在做公司面试题的时候,遇到了一道关于javascript之对象拷贝与赋值的问题,突然觉得很有意义,想和大家一起来分享一下!

首先,先摆出代码,如下:

/**
* created by administrator on 2016/12/7.
*/
var obj={
name:"dahuang",
age:10
}
var newobj=obj;
newobj.name="xiaohuang";
console.log(obj.name);
console.log(newobj.name);

这个程序的结果是两个都输出了被修改后的名字:xiaohuang。

上述代码使用在线html/css/javascript代码运行工具http://tools.jb51.net/code/htmljsrun得到如下运行结果:

JavaScript对象拷贝与赋值操作实例分析

那么,大家是不是感觉到很奇怪呢,明明只修改了newobj这个对象的name值,为什么obj对象的name值也被篡改了呢?

其实原因很简单,这是因为实际上newobj对象获得的只是一个内存地址,而不是真正的拷贝,所以obj对象被篡改。

但是当我们用object.create这个函数创建一个对象时,obj对象就不会被篡改,话不多说,先上代码:

var obj2 = {
  name: "dahuang",
  age: 10
}
var newobj2 = object.create(obj2);
newobj2.name = "xiaohuang";
console.log(obj2.name);
console.log(newobj2.name);

这个程序的结果是newobj2.name的值为xiaohuang,而obj2.name的值为dahuang,仍然保持不变。

上述代码使用在线html/css/javascript代码运行工具http://tools.jb51.net/code/htmljsrun得到如下运行结果:

JavaScript对象拷贝与赋值操作实例分析

使用object.create()方法进行对象的拷贝,object.create()方法可以创建一个具有指定原型对象和属性的新对象。

object.create()方法简介:

object.create() 方法创建一个拥有指定原型和若干个指定属性的对象。

语法

object.create(proto, [ propertiesobject ])

参数

proto 一个对象,作为新创建对象的原型。 propertiesobject可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与object.defineproperties()的第二个参数一样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。

抛出异常

如果 proto 参数不是 null 或一个对象值,则抛出一个 typeerror 异常。

eg:

//shape - superclass
function shape() {
 this.x = 0;
 this.y = 0;
}
shape.prototype.move = function(x, y) {
  this.x += x;
  this.y += y;
  console.info("shape moved.");
};
// rectangle - subclass
function rectangle() {
 shape.call(this); //call super constructor.
}
rectangle.prototype = object.create(shape.prototype);
var rect = new rectangle();
rect instanceof rectangle //true.
rect instanceof shape //true.
rect.move(1, 1); //outputs, "shape moved."

上述代码使用在线html/css/javascript代码运行工具http://tools.jb51.net/code/htmljsrun得到如下运行结果:

JavaScript对象拷贝与赋值操作实例分析

更多关于javascript相关内容还可查看本站专题:《javascript面向对象入门教程》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。