1. 对象,属性

前面看到对象里删除属性一直疑惑,什么是对象,为什么属性可以删除, 我印象里的属性还是停留在property, 总想不明白为什么属性竟然能够删除。直到看到标准库才明白,原来对象就是python里的字典,这个属性就是python里字典的key. delete就是删掉字典里面指定的一个值。这么简单的事如果有老师讲解会容易很多,用专业术语写出来的东西,作为新手真是费了好大劲才琢磨明白。

?  对象应该与python里的字典不完全一样,JS的对象包括数组、函数、三种原始类型(数值、字符串、布尔值)在一定条件下,也会自动转为对象。

书里面向对象一章解释了对象和属性:

对象是一个容器,封装了属性(property)和方法(method). 属性是对象的状态,方法是对象的行为(完成某种任务).

例如,可以把动物抽象为animal 对象, 使用属性记录具体是哪一种动物, 使用方法表示动物的某种行为。

? 如果属性是状态,那可以理解为什么能删除一种发生。但是上个例子中, 如果属性是动物类目,怎么能删除?属性到底是什么?怎么用?

window: 代表取全局变量。

2. 构造函数

C++ /Java是典型的面向对象编程语言,存在”类“(class) 这个概念。

”类“ 就是对象的模板,对象就是”类“的实例。

但是JavaScript 语言的对象体系,不是基于"类"的, 而是基于构造函数(constructor) 和原型链(prototype).

JavaScript 语言使用构造函数 (consttructor)作为对象的模板。 所谓”构造函数“,就是专门用来生成对象的函数。它提供模板,描述对象的基本结构。一个构造函数,可以生成多个对象, 这些对象都有相同的结构。

构造函数的写法就是一个普通的函数,但是有自己的特征和用法。为了与变通函数区别,构造函数名字的第一个字母通常大写。

 var Vehicle = function(){
this.price=1000;
};

构造函数的特点:
   > 函数体内部使用了this 关键字,代表了所要生成的对象实例。

> 生成对象的时候,必需用new命令,调用Vehicle函数。

new 命令 : 作用就是执行构造函数,返回一个实例对象。

 var Vehicle = function(){
this.price =1000;
}; var v=new Vehicle();
v.price //

上面代码通过new命令,让构造函数Vehicle生成一个实例对象,保存在变量v中。这个新生成的实例对象,从构造函数Vehicle继承了price属性。买  new 命令执行时,构造函数内部的this,就代表了新生成的实例对象,this.price表示实例对象有一个price属性, 值是1000.

使用new 命令时,根据需要,构造函数也可以接受参数。

 var Vehicle = function(p){
this.price=p;
}; var v =new Vehicle(500);

new 命令本身就可以执行构造函数,所以后面的构造函数可以带括号,也可以不带括号。下面两行代码是等价的:

 var v=new Vehicle();
var v=new Vehicle;

new 命令的原理

使用new命令时, 它后面的函数调用就不是正常的调用,而是依次执行下面的步骤:

1. 创建一个空对象,作为将要返回的对象实例。

2. 将这个空对象的原型,指向构造函数的Prototype属性。

3. 将这个空对象赋值给函数内部的this关键字。

4. 开始执行构造函数内部的代码。

构造函数内部,this指的是一个新生成的空对象,所有针对this的操作,都会发生在这个空对象上。 构造函数的目的就是操作一个空对象(即this 对象),将其构造成需要的样子。

如果构造函数内部有return语句,而且return后面跟着 个对象,new 命令会返回return语句指定的对象;否则,就会不管return语句,返回this对象。

 var Vehicle =function(){
this.price =1000;
return 1000;
}; (new Vehicle())===1000
// false

上面代码中, 构造函数Vehicle的return 语句一个数值。这时,new命令就会忽略这个return语句,返回构造后的this对象。但是,如果return语句是一个跟this无关的新对象,new 命令会返回这个新对象,而不是this对象。例:

 var Vehicle = function(0{
this.price=1000;
return{price:2000};
}; (new Vehicle()).price
//

上面代码中,构造函数Vehicle的return语句,返回的是一个新对象,new 命令会返回这个对象,而不是this 对象。

另一方面,如果对变通函数(内部没有this关键字的函数)使用new 命令,则会返回一个空对象。

 function getMessage(){
return "this is a messgae";
} var msg=new getMessage(); msg//{}
typeof msg //"object"

上面代码中,getMessage是一个变通函数,返回一个字符串。对它使用new命令,会得到一个空对象,这是因为new命令总是返回一个对象,要么是实例对象,要么是return语句指定的对象,本例中, return语句返回的是字符串,所以new命令就忽略了该语句。

Java Script 读书笔记 (四) 面向对象编程的更多相关文章

  1. 读书笔记-JavaScript面向对象编程(一)

    PDF下载链接: http://pan.baidu.com/s/1eSDSTVW 密码: 75jr 第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对 ...

  2. 读书笔记-JavaScript面向对象编程(三)

    第7章 浏览器环境 7.1 在HTML页面中引入JavaScript代码 7.2概述BOM与DOM(页面以外事物对象和当前页面对象) 7.3 BOM 7.3.1 window对象再探(所以JavaSc ...

  3. 《Effective Java》读书笔记 - 8.通用编程

    Chapter 8 General Programming Item 45: Minimize the scope of local variables local variables应该在他们要被用 ...

  4. Java Script 读书笔记 (三) 函数

    1. 函数作用域 在函数内部定义的变量,外部无法读取,称为"局部变量"(local variable). 变量v在函数内部定义,所以是一个局部变量,函数之外就无法读取. 函数内部定 ...

  5. 《Effective Java》读书笔记四(泛型)

    Java1.5发行版本中增加了泛型(Generic).在没有泛型之前,从集合中读取到的每一个对象都必须进行转换.如果有人不小心插入了错误的类型对象,在运行时的转换处理就会出错.有了泛型之后,可以告诉编 ...

  6. 读书笔记-JavaScript面向对象编程(二)

    第5章 原型 5.1 原型属性(所有函数拥有一个prototype属性,默认为空对象) 5.1.1 利用原型添加方法和属性 function Gadget(name,color){ this.name ...

  7. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  8. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

  9. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

随机推荐

  1. Windows2008修改密码策略简单介绍

    Windows2008修改密码策略简单介绍 Windows的密码策略,确实是挺繁琐的,刚接触SharePoint2010,装的windows2008 R2,就遇到了改密码策略的问题. 打开本地安全策略 ...

  2. UML类图简介

    概述 设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结. 类与接口的表示 类与接口通常是一个矩形框表示,一般分为3层,第 ...

  3. OS X10.10下HomeBrew的安装提示

    apple@kissAir: c_src$ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/m ...

  4. 鹅厂优文|打通小程序音视频和webRTC

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云终端技术总监常青, 2008 年毕业加入腾讯,一直从事客户端研发相关工作,先后参与过 PC QQ.手机QQ.QQ物联 等产品 ...

  5. 二叉查找树之 Java的实现

    参考:http://www.cnblogs.com/skywang12345/p/3576452.html 二叉查找树简介 二叉查找树(Binary Search Tree),又被称为二叉搜索树.它是 ...

  6. 【Web页面测试】测试点和测试用例

    1. 需求符合度测试 1. 各级菜单名称显示是否按照需求说明书规定的设计,并且没有遗漏和多余 2. 各级菜单所完成的功能是否按照需求说明书规定的设计,并且没有遗漏和多余 3. 各级菜单的操作顺序和操作 ...

  7. Day6_内置函数

    定义完一个有名函数,可以直接利用函数名+括号来执行,例如:func() 有名函数: def func(x,y,z=1): return x+y+z 匿名函数: lambda x,y,z=1:x+y+z ...

  8. Day5_协程函数_面向过程

    def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...

  9. python中的类机制

    一.python中的对象 1.python中对象种类及关系 <type 'type'>:该对象可以成为其他类的类型,python中几乎所有对象都是直接或间接由<type 'type' ...

  10. Js 浅克隆详解

    浅克隆:不仅赋值,而且赋予了内存地址深度克隆:赋值,内存地址不同var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] 面试时被问到这 ...