《javascript语言精粹》——第3章

第三章:对象:

属性名字:可以是包括空字符串在内的任意字符串;

属性值:是除undefined值之外的任何值;

【1】、对象字面量:

var obj={}; //空对象

var newobj={

  name:"小明",

  age:17,

school:{

    class:"一班"

  }

};

属性名可加引号,也可不加

【2】、检索

  newobj["name"] //小明

  newobj.age  //17  推荐使用.可读性更加好,紧凑

  newobj["name1"]  //若检索不存在的属性,则返回undefined值

||运算符可以用来填充默认值

  var test=newobj["name"]||"none";

&&运算符来避免错误

  var test1=newobj["newname"];   //undefined

  var test2=newobj["newname"].model; //throw "type.error"

  var test3=newobj.newname&&newobj.newname.model; //undefined

【3】、更新

  newobj["newname"]="小花";

  newobj.nickname="小三";

  newobj.family={

    mother:"老妈",

    father:"老爸"

  };

  若该属性名存在于该对象中,那么就是直接复制替换,若该属性值不存在于该对象中,那么直接扩充到该对象中,成为该对象的属性!

【4】、引用

  var x=newobj;

  x.nickname="小四";

  var nick=newobj.nickname; //小四

  var a={},b={},c={};

    //引用不同的空对象

  a=b=c={};

    //引用同一个空对象

【5】、原型

  if(typeof Object.beget!=="function")
  {
    Object.beget=function(o){
    var f=function(){};
    f.prototype=o;
    return new f();
    };
  }

  var anotherObj=Object.beget(newobj);
  newobj.brother="小弟"; //对作为原型对象的对象,若更新属性或者扩充属性,都会使基于该原型创建的对象可见,

但是,对于原型链接更新是,也就是基于原型创建的对象在改变时,不会触及到原型.原型连接只有在检索值的时候才会被用到。

检索顺序是:原型对象----》原型---》Object.prototype,若想要的属性不存在原型链中,就会返回undefined,该过程称之为委托。
  alert(anotherObj.brother); //小弟

【6】、反射

  typeof操作符确定属性的类型

  newobj.hasOwnProperty("brother") ;//true,因为brother是newobj对象中独有的属性

  newobj.hasOwnProperty("constructor");//false,因为constructor不是newobj对象中的独有的属性,别的对象也都有constructor

【7】、枚举

  var name;
  for(name in anotherObj){ //声明的name变量,用来临时装对象中的所有属性
    if(typeof anotherObj[name]!=="function"){
      document.writeln(name+":"+anotherObj[name]); //运行出来的顺序是不确定的
    }
  }

  var i;
  var prop=[
    "name",
    "nickname",
    "age",
    "brother"
  ];
  for(i=0;i<prop.length;i++)
  {
    document.writeln(prop[i]+":"+anotherObj[prop[i]]);//name:小明 nickname:小三 age:17 brother:小弟
  }

【8】、删除

  delete anotherObj.name;

  alert(anotherObj.name); //小明,不会删除原型链中的任何对象

  delete newobj.name;

  alert(newobj.name);//undefined

  delete newobj.name;

  alert(anotherObj.name);//undefined

  

  

  

《javascript语言精粹》——第3章,布布扣,bubuko.com

时间: 2024-12-11 11:31:03

《javascript语言精粹》——第3章的相关文章

JavaScript语言精粹_第九章

在软件的产品生命周期中,通常他们都会被修改,把一个正确的程序转化为另一个同样正确但风格不同的程序,是一个极具挑战性的过程. JavaScript包含大量脆弱的或有问题的特性,它们会妨碍我们写出优秀的程序.显然我们应该避免JavaScript中那些糟糕的特性,避免这些特性,就可以避免一大类潜在的错误. JavaScript的设计.实现和标准化的过程中,质量没有成为关注点,这增加了使用这门语言的用户避免其缺陷的难度.

《javascript语言精粹》——第4章函数

函数就是对象 [1].函数字面量即(函数表达式)包括四部分: 第一部分:保留字function: 第二部分:函数名称,可有可无: 第三部分:包围在一对小括号的一组参数,参数用逗号隔开: 第四部分:包围在一对花括号的一组语句,是函数的主体: 函数字面量可以出现在任何允许表达式出现的地方. [2].调用有四种调用模式: 除了声明时定义的形参,每个函数接收附加的的参数:this和arguments  ,this的值取决于调用的模式. 第一种:方法调用模式: var aa={ value:0, incr

《JavaScript语言精粹》之函数化

写在前面 看到好多书评和读书笔记都说<JavaScript语言精粹>字字珠玑,名不虚传..当然,要看得懂才行 其实个人认为函数化部分不是很好,举的例子不是十分恰当,之前看不懂是因为被成功误导了,就像<Head First>设计模式第一章<策略模式>一样,作者有些偏离章节主题,读者容易被误导 声明:姑且把函数化部分给出的用来创建对象的函数称为“创造函数”吧,为了与“构造函数”区分开..不是很好听,将就着用吧 一.源码中需要注意的点 很容易就能拿到源码,和中文版书上的代码一

《Javascript语言精粹》的学习(一).对象和函数

最近在学习小马和秦歌翻译的<javascript语言精粹>,果然如传闻般,里面的内容博大精深.有些章节所表达的意思往往需要看到后面的章节内容时才能够突然顿悟,因此,称这本书需要反复的去研究,真的名副其实.这两天看了对象和函数这两章,在这里把自己觉得需要关注的内容做一下笔记: ①对象常量中属性名的命名规范 记得刚开始学习对象常量的时候,觉得它真的很简便.一个对象名,一个大括号,N个“名/值”对,OK,搞定!可是在学习的过程中,也遇到过一些疑惑,比如在一些JS书籍中,在写对象常量时,对象中有的属性

《JavaScript语言精粹》读书笔记——给类型增加方法一节的疑问

最近,在学习<JavaScript语言精粹>这本书,发现译者虽然有很好地翻译文章,却没有对文中有疑问的地方进行改正或加以注释.我接触JavaScript只有一年左右,可能无法很好的理解这门语言,而今天,读到第四章中4.7节——给类型增加方法时遇到了疑问之处: 文中给出了对类型增加方法的示例: Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; 这里的示例

《JavaScript语言精粹》【PDF】下载

<JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是"世界上最被误解的语言",因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着ajax的到来,javascript"从最受误解的编程语言演变为最流行的语言",这除了幸运之外,也证明了它其实是一门优秀的语言.douglascrockford在本书中剥开了javascrip

《javascript语言精粹》读书笔记二

本节是对语言精粹第四章的一些总结和精华梳理,因为这一章主要是说明函数这个js中的一等公民的,所以专门抽出一节来希望把这个部分说透. 第四章 函数对象,函数对象也是一个对象之中,函数对象在创建中会产生一个prototype属性. 函数字面量,通过函数字面量创建的函数对象包含一个连到外部上下文的连接,这被称为闭包.这是js强大表现力的来源. 函数调用方式,函数一共有四种调用方式,这四种调用方式在初始化this这个关键参数上存在差异: 1. 方法调用模式 2. 函数调用模式 3. 构造器调用模式 4.

JavaScript语言精粹 笔记01

内容比较简单,只是从头梳理一下JS的知识 语法空白标识符数字字符串语句 对象对象字面量检索更新引用原型反射枚举删除减少全局变量污染  语法 1 空白 空白可能表现为格式化字符或注释的形式.空白通常没有意义,但是偶尔必须用它来分割字符序列,否则它们就会被合并成一个单一的符号.例如: var that = this; var 和that之间的空格是不能去掉的,其他的空格都可以被移除. JS提供两种注释: /* */ // 建议使用//,因为/* */中要注释的内容可能包括字符 */ 而报错,例如:

javascript语言精粹----笔记【转载】

javascript语言精粹----笔记 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'number','string','boolean','undefined','function','object';其中typeof(null),结果是'object' 3.number类型总是64位浮点数,两个整数相除也可能出现非整数结果 4.如果第一个运算数的值为假,那么运算符&&产生它的第一个运算数的值.