zoukankan      html  css  js  c++  java
  • JavaScript 对象深入学习总结

    JavaScript 对象深入学习总结(1)

    http://developer.51cto.com/art/201509/492640.htm

    2015-09-29 09:27 clearbug 字号:T | T
    一键收藏,随时查看,分享好友!

    JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢?

    AD:

    JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢?

    一.概述

    对象是一种复合值,它将很多值(原始值或其他对象)聚合在一起,可通过属性名访问这些值。而属性名可以是包含空字符串在内的任意字符串。 JavaScript对象也可以称作一种数据结构,正如我们经常听说的“散列(hash)”、“散列表(hashtable)”、“字典 (dictionary)”、“关联数组(associative array)”。

    JavaScript中对象可以分为三类:

    ①内置对象,例如数组、函数、日期等;

    ②宿主对象,即JavaScript解释器所嵌入的宿主环境(比如浏览器)定义的,例如HTMLElement等;

    ③自定义对象,即程序员用代码定义的;

    对象的属性可以分为两类:

    ①自有属性(own property):直接在对象中定义的属性;

    ②继承属性(inherited property):在对象的原型对象中定义的属性(关于原型对象下面会详谈);

    二.对象的创建

    既然学习对象,又怎能不懂如何创建对象呢?面试前端岗位的同学,可能都被问过这个基础问题吧:

    创建JavaScript对象的两种方法是什么?(或者:说说创建JavaScript对象的方法?)

    这个问题我就被问过两次。“创建对象的两种方法”这种说法网上有很多,但是据我所看书籍来说是有三种方法的!下面我们就来具体谈谈这三种方法:

    1.对象直接量

    对象直接量由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来。属性名可以是JavaScript标识符也可以是字符串直接量,也就是说下面两种创建对象obj的写法是完全一样的:

    var obj = {x: 1, y: 2};
    var obj = {'x': 1, 'y':2};

    2.通过new创建对象

    new运算符后跟随一个函数调用,即构造函数,创建并初始化一个新对象。例如:

    1 var o = new Object();    //创建一个空对象,和{}一样
    2 var a = new Array();    //创建一个空数组,和[]一样
    3 var d = new Date();    //创建一个表示当前时间的Date对象

    关于构造函数相关的内容以后再说。

    3.Object.create()

    ECMAScript5定义了一个名为Object.create()的方法,它创建一个新对象,其中第一个参数是这个对象的原型对象(好像还没解 释原型对象…下面马上就说),第二个可选参数用以对对象的属性进行进一步的描述,第二个参数下面再说(因为这第三种方法是ECMAScript5中定义 的,所以以前大家才经常说创建对象的两种方法的吧?个人觉得应该是这个原因)。这个方法使用很简单:

    1 var o1 = Object.create({x: 1, y: 2});    //对象o1继承了属性x和y
    2 var o2 = Object.create(null);    //对象o2没有原型

    下面三种的完全一样的:

    1 var obj1 = {};
    2 var obj2 = new Object();
    3 var obj3 = Object.create(Object.prototype);

    为了解释为啥这三种方式是完全一样的,我们先来解释下JavaScript中的原型对象(哎,让客官久等了!),记得一位大神说过:

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。

    面向对象的编程语言JavaScript,没有类!!!那么,它是怎么实现继承的呢?没错,就是通过原型对象。基本上每一个JavaScript对 象(null除外)都和另一个对象相关联,“另一个”对象就是所谓的原型对象(原型对象也可以简称为原型,并没有想象的那么复杂,它也只是一个对象而 已)。每一个对象都从原型对象继承属性,并且一个对象的prototype属性的值(这个属性在对象创建时默认自动生成,并不需要显示的自定义)就是这个 对象的原型对象,即obj.prototype就是对象obj的原型对象。

    原型对象先说到这,回到上面的问题,有了对原型对象的认识,下面就是不需要过多解释的JavaScript语言规定了:

    ①所有通过对象直接量创建的对象的原型对象就是Object.prototype对象;

    ②通过关键字new和构造函数创建的对象的原型对象就是构造函数prototype属性的值,所以通过构造函数Object创建的对象的原型就是Object.prototype了;

    现在也补充了第三种创建对象的方法Object.create()第一个参数的含义。

     

  • 相关阅读:
    从零开始——PowerShell应用入门(全例子入门讲解)
    详解C# Tuple VS ValueTuple(元组类 VS 值元组)
    How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On——RHEL Pacemaker中配置STONITH
    DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
    SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)
    SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)
    微软SQL Server认证最新信息(17年5月22日更新),感兴趣的进来看看哟
    Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
    3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理
    由Find All References引发的思考。,
  • 原文地址:https://www.cnblogs.com/huyayuan1/p/4857065.html
Copyright © 2011-2022 走看看