• 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()第一个参数的含义。

     

  • 相关阅读:
    修改mysql密码的四种方法
    phpcms模板生成原理
    如何给虚拟主机安装phpMyAdmin
    如何修改数据库密码
    web 服务器、PHP、数据库、浏览器是如何实现动态网站的
    编写shell时,提示let/typeset:not found
    Linux下采用VI编辑器删除复制或移动多行文本内容
    BASH 学习笔记小结
    list容器的C++代码实现
    Groovy入门教程
  • 原文地址:https://www.cnblogs.com/huyayuan1/p/4857065.html
Copyright © 2020-2023  润新知