javascript——对象的概念——创建对象与销毁对象
一、创建对象
1、创建空对象
方式一:
var o ={};o; //Object {}
typeof(o); //"object"
方式二:
var o=new Object();o;//Object {}
typeof(o);//"object"
2、创建非空对象
在 javascript 中创建对象有两种方式:对象文本标记法、构造器函数定义对象;
方式一:对象文本标记法:
先上例子:
var hero= {
name:'小明',
Sex:'男',
say: function(){ return this.name+': 您好!';}
};
hero.name; //"小明"
hero.Sex; //男"
hero.say(); //"小明: 您好!"
hero['name']; //"小明"
hero['Sex']; //男"
hero['say'](); //"小明: 您好!"
var a='name'; hero[a]; //"小明"
创建对象——文本标记法
采用文本对象标记法定义对象要注意以下问题:
- 定义一个对象时要用{},但与函数不同的是无关键字 function;
- 对象内部格式: 属性名:属性值,不同属性值之间用 “,” 隔开;
- 对象内部 this 表示当前对象;
- 调用对象的方法和属性有两种方式如下:hero.name; 和 hero['name']; 后一种类似于数组的方式可以采用动态方式
文本对象标记法与函数的区别:
| 文本对象标记法 | 函数 | |
| 区别 | 无关键字 function | 有关键字 function |
| 语法 | var n={} | var n=function(){}或 function n(){} |
方式二:构造器函数法:
例子:

function people(name)
{
this.name=name;
this.sex='男';
this.say=function(){return this.name+': 您好!';};
}
var hero=new people('小强');
hero.name; //"小强"
hero.sex; //"男"
hero.say(); //"小强: 您好!"
hero['name']; //"小强"
hero['sex']; //"男"
hero['say'](); //"小强: 您好!"
var a='sex'; hero[a]; //"男"
创建对象——构造器函数法
采用文本对象标记法定义对象要注意以下问题:
- 构造器函数与函数类似:都有function,但构造器均有 this 指向当前对象,否则无法调用;
文本对象法与构造器函数法的不同点:
| 文本对象法 | 构造器函数法 | |
| 实例化? | 直接创建对象,无需实例化 | 创建的只是一个用于创建对象的构造器函数,必须用构造器函数法实例化对象 |
| 对象个数? | 只能创建一个 | 可以实例化多个对象;利用构造器函数的参数可以创建内容不一样的对象 |
| this? | 表实例化之后的对象。 |
二、实例对象、类对象
上面的构造器函数法使用 this 表示正在实例化的对象。即使用 this 的属性是属于实例化对象的。还有一种绑定到构造函数,表示类的属性,类似于 C# 中的静态属性,是属于所有由该构造函数实例化的对象共有的。
例:

function people(name,s,age){ this.name=name;sex=s;people.age=age;};
var a=new people('小强','男',24);
var b=new people('小丽','女',20);
a.name; //"小强"
b.name; //"小丽"
a.sex; //undefined
a.age; //undefined
people.age; //
sex; //"女"
实例化对象属性例子
如上实例化两个实例,每个实例都可以访问到属于自己的(用 this 绑定到实例化对象的,在此为 name)属性;使用构造器函数名绑定到类的属性(在此为绑定到people的属性 age )则无法使用实例化对象访问到,只能使用构造器函数访问到;而即未使用 this 又未使用构造器函数名绑定的属性sex,在此为全局变量,可以直接访问。
修改如下:

通过函数的方式访问类属性。
三、对象废除
对于javascript 语言,其拥有无用存储单元收集程序,意味着我们可以不必专门销毁对象来释放内存。如果再没有对对象的引用时,当运行无用存储单元收集程序时,即可销毁所有的对象。但作为一个良好的习惯,把对象的所有引用都设置为 null,可以强制性地废除对象。例如:hero=null;当对象变量 hero 设置为 null 后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。
注意:废除对象的所有引用时要当心。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为 null。
四、早绑定和晚绑定
绑定:把对象的接口与对象实例结合在一起的方法。
- 早绑定:指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。ECMAScript 不是强类型语言,所以不支持早绑定。
- 晚绑定:编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
- 极晚绑定:从技术上讲,根本不存在极晚绑定。本书采用该术语描述 ECMAScript 中的一种现象,即能够在对象实例化后再定义它的方法。
例如:

function people(name)
{
this.name=name;
this.sex='男';
this.say=function(){return this.name+': 您好!';};
}
var hero=new people('小强');hero.name; //"小强"
people.prototype.likething=function(){return this.name+':喜欢吃零食。';};
hero.likething(); //"小强:喜欢吃零食。"
在大多数程序设计语言中,必须在实例化对象之前定义对象的方法。这里,方法 sayHi() 是在创建 Object 类的一个实例之后来添加进来的。在传统语言中不仅没听说过这种操作,也没听说过该方法还会自动赋予 Object 对象的实例并能立即使用。
注意:不建议使用极晚绑定方法,因为很难对其跟踪和记录。不过,还是应该了解这种可能。
javascript——对象的概念——创建对象与销毁对象的更多相关文章
- javascript——对象的概念——函数 1 (函数对象的属性和方法)
一.创建函数 函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数. 方式一:利用 Function类 来实例化函数 ...
- javascript——对象的概念——Object(未完)
http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html javascript中对象只包括属性和方法两种成员.ECMA-262 把 ...
- JavaScript对象类型之创建对象
引言 JavaScript中,可以通过对象直接量,关键字new(ECMAScript 5中的)Object.create(),函数来创建对象. 对象直接量 JavaScript中使用对象直接量来创建对 ...
- 浅谈Js对象的概念、创建、调用、删除、修改!
一.我们经常困惑,对象究竟是什么,其实这是一种思维,一种意识上的东西,就像我们都说 世界是有物质组成的道理一样,理解了下面的几句话!对象也不是那么抽象! 1.javascript中的所有事 ...
- 《Javascript高级程序设计》读书笔记之对象创建
<javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...
- JavaScript基础知识(JSON、Function对象、原型、引用类型)
19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式 特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...
- javaScript之分支判断与内置对象
一,分支结构 单一选择结构(if) 二路选择结构(if/else) 内联三元运算符 ?: 多路选择结构(switch) 1.1 if 控制语句 if-else基本格式: if (表达式){ 语句1; ...
- 【JavaScript高级程序设计】6.1 理解对象
上一章曾经介绍过,创建自定义对象的最简单方式就是创建一个Object 的实例,然后再为它添加属性和方法,如下所示. var person = new Object(); person.name = & ...
- 对象(面向对象、创建对象方式、Json)
一.面向对象 面向过程:凡事亲力亲为,每件事的具体过程都要知道,注重过程 面向对象:根据需求寻找对象,所有的事都用对象来做,注重结果 面向对象特性:封装.继承.多态(抽象性) js是一门基于对象的语言 ...
随机推荐
- 分开统计的sql写法
DECLARE @StartDate DATETIME= '2017-10-13 00:00:00';DECLARE @EndDate DATETIME= '2017-11-13 23:00:00'; ...
- UOJ12 猜数
这一天,小Y.小D.小C正在愉快地玩耍. 小Y是个数学家,他一拍脑袋冒出了一个神奇的完全平方数 nn. 小D是个机灵鬼,很快从小Y嘴里套出了 nn 的值.然后在脑内把 nn 写成了 a×ba×b的形式 ...
- JMeter接口测试报错,反馈和postman不一样(一)
今天发现一个小的细节 同样一条请求,postman里面直接写就好 JMeter里面需要把编码加上 例如,同样一句话 postman里面这么写,返回值为 但是在JMeter里面这么写 显示结果为 在这里 ...
- libvirt/qemu特性之numa
博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! Numa 查看主机node情况 使用virsh命令查看 virsh # c ...
- APP Store审核太慢?大神分享快速审核的小技巧
这节课要来跟大家讲讲怎样可以快速的有效的通过苹果的审核,大家可能也有听说过苹果的快审,苹果的审核流程除了机器审核还有一个人工的审核,以前的苹果审核时用到的时间也是不短,一些有经验的开发者可能也会发现在 ...
- Spring Boot入门——JPA
JPA最大的特点就是可以根据@Entity自动创建你数据库表,用户只需要声明持久层的接口,不需要实现该接口 1.JPA概念 JPA全称Java Persistence API,JPA通过JDK5.0注 ...
- 包--R In Action
1.4 包R提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装来实现的.目前有2500多个①称为包(package)的用户贡献模块可从http://cran.r-proje ...
- 找到Office 2016 for MAC中AutoUpdate等组件的本地下载位置
更新:64位delta升级文件如: $ &>/dev/null /private/var/folders/8g/7f3zrs2j3hb1jx58z1_vkykh0000gn/T/MSau ...
- requests 简单应用
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html ,官方文档.自己有空看看顺便敲两下熟悉一下. 还有别把文件放的太深 ...
- MongoDB 高可用集群搭建(3.4)
一.架构概况192.168.56.101192.168.56.102192.168.56.103OS为centos 7.2 架构图: 规划5个组件对应的端口号,由于每台机器均需要同时部署 mong ...