JS中一切皆为对象,这是一句常说的话。了解JS对象,从这句话开始吧。JS中的基本数据类型如number,bool,字符串,数组,null,undefined等等都是对象。

对象的本质:

带有属性和方法的特殊数据类型,而每个属性或者方法又可看做是一个键值对,因此可以这样定义:对象是一系列无序键值对的集合

在JS中对象分为两种:

  • JS的内建对象,如:string,Date,Array等
  • 你自己创建的对象

JS中如何创建自己的对象:

1 对象初始化器,这种方式最为简单暴力,直接一系列明显的键值对集合。

    var obj={
name:'PengL',
age:100,
func:function()
{
alert("I am "+obj.name+" and I am "+obj.age);
}
};

2 构造函数

    function person(name,age){
this.name=name;
this.age=age;
this.func=func;
function func()
{
alert("I am "+this.name+" and I am "+this.age);
}
}
var obj=new person("PengL",100);

说明:第一种方法是直接创建的一个对象的实例,第二种是通过new构造函数的方式来创建一个对象,并且传入不同的参数,这样对象对应的属性值就不一样。不过要注意的是不要忘了new,不然就是把一个普通函数赋给了obj,并且这时的this指向也是混乱的了。关于this指向的问题可以参考一下作者的另一篇博客javascript进阶之this

对于构造函数创建对象的方法我还想再进一步介绍一下

一般在真实的项目中上面demo的写法其实是不合理的。最好的方式是原型和构造函数混用的方式来做,比如上面的可以改成这样

    function person(name,age)
{
this.name=name;
this.age=age;
}
person.prototype.func=function(){
alert("I am "+this.name+" and I am "+this.age);
};

这种方式不仅结构清楚,最重要的是还节约了内存,在对象的原型上创建的方法,那么这个方法就是通过该构造函数所创建的所有对象共有的方法了。各个对象有自己独有的name,age属性,有共有的func方法。如果有对原型不熟悉的同学可以看看这篇廖雪峰大神的作品廖雪峰


最后再做一下总结吧,加深一下印象

  • JS中一切皆对象
  • 对象本质是一系列无序键值对的集合
  • 创建对象有两种常见的方法,初始化器和构造函数(不同情况来进行选择,并非总是第二种最好)

JS基础之对象的更多相关文章

  1. JS基础学习——对象

    JS基础学习--对象 什么是对象 对象object是JS的一种基本数据类型,除此之外还包括的基本数据类型有string.number.boolean.null.undefined.与其他数据类型不同的 ...

  2. JS基础语法---对象总结

        * 编程思想:     * 面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程     * 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果     *   ...

  3. JS基础_对象的简介、对象的基本操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 【JS基础】对象

    delete 可以删除对象属性及变量 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);// ...

  5. js基础-单体对象日期对象

    Math对象 全局对象 日期对象 var t = new Date() t.toLocaleDateString(); t.getFullYear(); t.getMonth() + 1 t.getD ...

  6. 2-4 js基础-事件对象小结

    var e=ev||event; e.cancelBubble=true; document.documentElement   html document.body                  ...

  7. JS基础_对象的方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. JS基础_对象字面量

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. JS基础_对象操作

    1.in 运算符 通过该运算符可以检查一个对象中是否含有指定的属性,如果有,返回true 语法: “属性名” in 对象 var obj = { name:"hello" } co ...

随机推荐

  1. [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)

    [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...

  2. 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释

    一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...

  3. SQL Server 事务隔离级别详解

    标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...

  4. JS实战 · 表单验证

    思路:         1.定义页面             通过表格格式化表单:             表格行都有自己的背景颜色:             单元格中的数据(文本等)用div进行封装 ...

  5. 删除 Windows 旧 OS 加载器

    装过多个系统,然后又删除掉了,系统启动引导时,又把以前的废弃的系统引导给带了出来,试过多种方式,以下方法是最好的. 开始->运行->cmd bcdedit /v 查看要删除的"W ...

  6. KnockoutJS 3.X API 第六章 组件(2) 组件注册

    要使Knockout能够加载和实例化组件,必须使用ko.components.register注册它们,从而提供如此处所述的配置. 注意:作为替代,可以实现一个自定义组件加载器(自定义加载器下一节介绍 ...

  7. SSIS Parameter用法

    今天学习SSISParameter的用法,记录学习的过程. Parameters能够在Project Deployment Model下使用,不能在Package Deployment Model使用 ...

  8. 前端:圆图头像制作--border-radius : 100%

    异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html border-radius : 100% border-radius: 6px; ...

  9. WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...

  10. Android启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...