js对象的创建

作者: markdown | 来源:发表于2016-06-23 21:02 被阅读147次

一、创建对象的方法

阅读犀牛书(《javascript权威指南》),书中将js创建对象的方法分为四种,对象字面量、构造函数、原型、Object.create()。

1、对象字面量:

需要修改属性只能在对象上修改

var t1 = {x: 1};//也可以写作var t1 = new Object({x: 1});

2、构造函数

需要修改属性也只能在对象上修改,在对象上的修改不会影响到构造器

function f2(){
  this.x = 1;
};
var t2 = new f2();//t2创建后,t2的属性不受f2的影响

3、原型

可以通过修改构造器prototype的值,修改对象的值,但是如果对象上的属性重新赋值了,则在对象上获取的值是重新赋值的值,而不是构造器prototype的值

function f3(){};
var t3 = new f3();
f3.prototype.x = 1;//如果重新给f3.prototype.x赋值,t3.x也会随之改变
t3.x = 3; //改t3的值重新赋值之后t3.x不会随f3.prototype.x改变

4、Object.create()

可以通过修改父对象的值修改对象的值,重新赋值则无法修改

var f4 = {x: 1};
var t4 = Object.create(f4);//如果f4的属性改变,t4相应的属性也会改变

二、创建的对象的本质

以上四种方法看似不同,但他们的本质是一样的,都是通过最基本的new Object()与原型来实现对象的创建的。
使用构造器创建对象,其本质如下:

new函数说明.png
对象的__proto__指向了构造器的prototype,所以修改构造器的属性不会影响对象,但是修改构造器原型会。
使用Object.create() Object.create说明.png
对象的__proto__ 指向了构造器,所以可以通过修改父对象影响对象的属性

三、__proto__prototype

__proto__prototype是比较容易混淆的两个属性。__proto__是对象的属性,用来在原型链上查找你需要的方法的实际对象。prototype是函数独有的属性当我们使用关键词new并且将函数作为构造函数来构造对象的时候, 它被用来构建对象的__proto__属性.
对于非函数的对象来说比较简单只有__proto__,但是函数也是对象,所以在函数中__proto__prototype同时存在,一个函数作为构造器时,参与其中的是prototype属性,但是被创建时,__proto__指向了Function.prototype

相关文章

  • JS对象

    JS 创建对象 批量创建对象

  • 6.JavaScript中

    JS对象创建: JS通过构造函数创建对象: JS内置对象window: 所有的全局变量都是window的属性 所有...

  • JS笔记-006-JS对象-数字-字符串-日期-数组-逻辑

    JS对象 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象。 创建新对象有...

  • JS对象

    1、JS中的对象(Object) 1.1、创建空白对象 1.2、构造函数(就是为了创建对象实例) 一、可以创建对象...

  • 面向对象案例:随机方块

    1.创建画布 2.创建工具对象--tools.js 3.创建box盒子对象--box.js 3.1创建构造函数 3...

  • 对象,属性,方法,属性绑定

    vue创建在js里面对象的创建方法

  • JS创建对象

    一、基本方法 1.字面量:var o = {}; 2.构造函数:var o = new Object(); 二...

  • JS创建对象

    工厂模式 由于在ECMAScript无法创建类,所以用函数的封装以特定接口创建对象 问题:解决了创建多个相似对象的...

  • js 创建对象

    创建对象的几种方法 方法一:new Object() 方法二:{} 方法三:function xx() 为对象中添...

  • js创建对象

    this指针构造器创建 工厂模式 new 出来 prototype变量赋值 :为属性赋值链接

网友评论

    本文标题:js对象的创建

    本文链接:https://www.haomeiwen.com/subject/ybcodttx.html