第4章 对象

4.1 从数组到对象

对象的组成:变量名、{}、用逗号分割的属性、用冒号分割的键/值对。

        var f={
name:'alen', // 可以在属性名上加引号
age:12
};

对象文本标识法:用{}定义对象的方法;数组文本标识法:用[]定义数组的方法。

4.1.1 元素、属性、方法与成员

数组包含元素,对象包含属性。说法不同,但本质相同。当对象的属性为函数时,称该属性为方法。

        var dog={
name:'aa',
talk:function (){ //talk是一个方法
alert('woof,woof!');
}
};

4.1.2 哈希表、关联型数组

数组形式:

一般性数组:也叫索引型数组或枚举型数组(通常以数字为键名)

关联型数组:哈希表或字典(通常以字符串为键值)

4.1.3 访问对象属性

中括号表示法:如dog['name'].

点号表示法:dog.name      可以混合使用两种表示法

如果要访问的属性名不确定,必须使用中括号表示法。

4.1.4 调用对象方法

在指定的方法名后面加()

dog.talk(); //或dog['talk']()

4.1.5 修改属性与方法

        //为对象添加属性和方法
var hero={};
hero.name='a';
hero.sayName=function (){
return hero.name;
};
//调用方法
hero.sayName();
//删除属性
delete hero.name

4.1.6 使用this值

       var hero={
name:'a',
sayName:function (){
return this.name; // this引用当前对象或这个对象
}
};

4.1.7 构造器函数

通过构造器函数来创建对象

       //使用构造器函数来创建对象,构造器函数的首字母一般大写
function Hero(){
this.name='a';
}
//使用new操作符,为该函数创建对象
var f1=new Hero();
f1.name; // "a"
//没用使用new操作符
var f1=Hero();
typeof h; // "undefined"

4.1.8 全局对象

当宿主的环境是web浏览器时,它提供的全局对象是window。

var a=1;
window.a;//
this.a; //1

当构造函数不使用new时,this指向全局对象,所以typeof h;// undefined

4.1.9 构造器属性

constructor property:指向用于创建该对象的构造器函数的引用。

 function Hero(){};
var a=new Hero();
a.constructor; // function Hero(){}
var o={}; // 由内建构造函数Object()创建
o.constructor; // function Object() { [native code] }

4.1.10 instanceof 操作符

测试一个对象是否为某一个指定的构造器函数所创建。

a instanceof Hero;  // true

4.1.11 返回对象的函数

使用一般函数来创建对象。

        function factory(name){
return {
name:name
};
}
var o=factory('one');
o.name; // "one"
o.constructor; // function Object() { [native code] }

4.1.12 传递对象

当拷贝某个对象或者将它传递给某个函数时,往往传递的是该对象的引用。因此在引用上所做的任何更改,都会影响它所引用的原对象。

        var f1={age:};
var f2=f1;
f1.age; //
f2.age=; //改变age的值
f1.age; // 100 f1中age的值也发生改变

4.1.13 比较对象

对象比较操作时,当且仅当两个引用指向同一个对象,结果为true。

        var f3={name:"alen"};
var f4={name:"alen"};
f3===f4; // false

4.2 内建对象

内建对象大致分为三类:

数据封装类对象——包括Object、Array、Boolen、String、Number。

工具类对象——Nath、Date、RegExp等

错误类对象

4.2.3 Function

三种定义函数的方式

        // 函数定义的三种方式

         // 函数声明
function sum(a,b){
return a+b;
}
// 函数表达式
var sum=function (a,b){
return a+b;
}
// 构造函数 不推荐使用
var sum=new Function('a','b','return a+b');
4.2.3.1 函数对象的属性

constructor:引用Function这个构造器函数

length:参数的数量

        function f1(){
return ;
};
f1.constructor; // function Function() { [native code] }

prototype属性:指向一个对象,只有该函数是构造器时才会发挥作用。

4.2.3.2 函数对象的方法

拥用Object对象的方法。toString()方法:函数的源代码

        function f1(){
return ;
};
f1.constructor; // function Function() { [native code] }
f1.toString(); // "function f1(){return 1;}" 源代码
parseInt.toString(); // "function parseInt() { [native code] }" 内建函数
// 可以使用toString来区分本地方法和自定义方法
4.2.3.3 call()与apply()

每个函数都有call()和apply()方法,用来触发函数并指定相应的参数。

可是实现代码重用:让一个对象去借用另一个对象的方法。

       var f1={
name:'Alen',
say:function (who){
return 'Hi '+who+', I am '+this.name;
}
};
f1.say('XiaoMing'); //"Hi XiaoMing, I am Alen"
var f2={name:'XiaoLi'};
// f2调用f1的say()方法 f1的say方法借给f2
f1.say.call(f2,'XiaoMing'); //"Hi XiaoMing, I am XiaoLi"
// apply方法参数的传递通过数组
f1.say.apply(f2, ['XiaoMing']); //"Hi XiaoMing, I am XiaoLi"
4.2.3.4 重新认识arguments对象

arguments和数组相比只包含了索引元素和length属性。但可以把arguments转换为数组,从而使用各种数组的方法。

        function f(){
var args=Array.prototype.slice.call(arguments);//继承数组的方法
// var args=[].slice.call(arguments);
return args.reverse(); //翻转
}
f(,,,); // [4, 3, 2, 1]

JavaScript面向对象编程指南(四) 对象的更多相关文章

  1. 「JavaScript面向对象编程指南」对象

    对象的属性名可加上引号,下面三行代码所定义的内容是完全相同的 var hero = { occupation : 1 }; var hero = { "occupation" : ...

  2. 《JavaScript面向对象编程指南(第2版)》读书笔记(一)

    目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...

  3. 《JavaScript面向对象编程指南(第2版)》读书笔记(二)

    <JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...

  4. 《JavaScript面向对象编程指南》读书笔记②

    概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...

  5. 《JavaScript面向对象编程指南》读书笔记①

    概述 JavaScript快忘完了,想看一本专业书拾遗,所以看了这本<JavaScript面向对象编程指南>. 个人觉得这本书讲的很透彻很易懂,一些原来有疑惑的地方在这本书里面豁然开朗,看 ...

  6. 闭包初体验 -《JavaScript面向对象编程指南》

    下面是我对闭包的理解:(把他们整理出来,整理的过程也是在梳理) 参考<JavaScript面向对象编程指南> 1.首先,在理解闭包之前: 我们首先应该清楚下作用域和作用域链 作用域:每个函 ...

  7. js_读【javascript面向对象编程指南】笔记

    写在前面: 工欲善其事,必先利其器.编程的器,是前人总结的经验,常言道站在巨人的肩膀上开发,往往比自己另辟蹊径容易的多.经验藏于书,故有书中自有颜如玉,书中自有黄金屋,我也一度认为读书要花费很多时间, ...

  8. 《JavaScript面向对象编程指南》

    第一章.引言 1.5 面向对象的程序设计常用概念 对象(名词):是指"事物"在程序设计语言中的表现形式. 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作 ...

  9. 《JavaScript面向对象编程指南》译者序

    相对于Perl.Python等动态脚本语言来说,JavaScript确实是一门饱受误解的语言.对于译者这种从20世纪90年代末走过来的C++程序员来说,尤其如此.在那个年代,提起JavaScript总 ...

随机推荐

  1. shell 中的单行注释和多行注释

    1. 单行注释 众所周知,#  比如想要注释:echo “ni” # echo "ni" 2. 多行注释: 法一: : << ! 语句1 语句2 语句3 语句4 ! 例 ...

  2. Scala - 快速学习01 - Scala简介

    Scala简介 Scala(Scalable Language)是一门多范式(multi-paradigm)编程语言,Scala的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...

  3. Python开发之---PyCharm初体验

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  4. ExternalException (0x80004005): 无法执行程序

    今天更新系统上传到阿里云服务器,报错如下: “/”应用程序中的服务器错误. 组策略阻止了这个程序.要获取详细信息,请与系统管理员联系. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆 ...

  5. Android--UI之TextView

    前言 开门见山,这一篇博客主要讲一下在Android开发中,UI控件TextView的一些使用方式,并且通过四个例子实现一般项目中需要的效果来讲解TextView的使用.并且在之后的一段时间之内,都会 ...

  6. Jenkins问题记录:android构建时提示Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zip to /home/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9 Except

    -------------- -------------- 问题:今日job构建报出如下错误: Unzipping /home/.gradle/wrapper/dists/gradle-3.3-all ...

  7. [Charles]SSLHandshake: Received fatal alert: certificate_unknown

    ---------------------- 转载请注明出处 http://www.cnblogs.com/dzblog/p/8119712.html --------------------- 今天 ...

  8. 【EF6学习笔记】(二)操练 CRUD 增删改查

    本篇原文链接: Implementing Basic CRUD Functionality 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...

  9. [JavaScript] 前端模块编程实现

    前端模块化 前端早期写代码都是全局变量满天飞,这种情况会造成全局命名空间污染,变量冲突等问题 var a = 1; var b = 2; function c(){} function d(){} 后 ...

  10. OpenCV入门之获取验证码的单个字符(二)

      在文章 OpenCV入门之获取验证码的单个字符(字符切割)中,介绍了一类验证码的处理方法,该验证码如下: 该验证码的特点是字母之间的间隔较大,很容易就能提取出其中的单个字符.接下来,笔者将会介绍如 ...