当前位置: 首页 > news >正文

js 对象

JavaScript 的设计是一个简单的基于对象的范式。一个对象就是一系列属性的集合,一个属性包含一个名和一个值。一个属性的值可以是函数,这种情况下属性也被称为方法。除了浏览器里面预定义的那些对象之外,你也可以定义你自己的对象。

定义对象

JavaScript 拥有一系列预定义的对象。另外,你可以创建你自己的对象。从 JavaScript 1.2 之后,你可以通过对象初始化器(Object Initializer)创建对象。或者你可以创建一个构造函数并使用该函数和 new 操作符初始化对象。

通过对象初始化器创建对象的语法如下:

var obj = { property_1:   value_1,   // property_# 可以是一个标识符
            2:            value_2,   // 或一个数字
           ["property" +3]: value_3,  //  或一个可计算的 key 名
            // ...,
            "property n": value_n }; // 或一个字符串

作为另一种方式,你可以通过两步来创建对象:

1、通过创建一个构造函数来定义对象的类型。首字母大写是非常普遍而且很恰当的惯用法。
2、通过 new 创建对象实例。

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
var mycar = new Car("Eagle", "Talon TSi", 1993);

上面提到的都是属性值不是函数的情况,如果一个对象的属性包含函数,应该怎么定义这个函数呢?定义方法就像定义普通的函数,除了它们必须被赋给对象的某个属性。

objectName.methodname = function_name;

var myObj = {
  myMethod: function(params) {
    // ...do something
  }

  // 或者 这样写也可以
  myOtherMethod(params) {
    // ...do something else
  }
};

也可以在对象的构造函数中包含方法定义来为某个对象类型定义方法。注意使用 this 指代方法所属的对象。

function displayCar() {
  var result = `A Beautiful ${this.year} ${this.make} ${this.model}`;
  pretty_print(result);
}
function Car(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
  this.displayCar = displayCar;
}

访问对象

在 JavaScript 1.0 中,你可以通过名称或序号访问一个属性。但是在 JavaScript 1.1 及之后版本中,如果你最初使用名称定义了一个属性,则你必须通过名称来访问它;而如果你最初使用序号来定义一个属性,则你必须通过索引来访问它。

// 访问对象属性方式一
obj.name
// 访问对象属性方式二
obj['name']
// 访问对象属性方式三
// 将对象属性赋值给一个变量,使用变量方式访问
var key = 'name'
obj[key]

JavaScript 有一个特殊的关键字 this,它可以在方法中使用以指代当前对象。例如,假设你有一个名为 validate 的函数,它根据给出的最大与最小值检查某个对象的 value 属性:

function validate(obj, lowval, hival) {
  if ((obj.value < lowval) || (obj.value > hival)) {
    alert("Invalid Value!");
  }
}

然后,你可以在每个元素的 onchange 事件处理器中调用 validate,并通过 this 传入相应元素,代码如下:

<input type="text" name="age" size="3" onChange="validate(this, 18, 99)">

修改对象

可以通过 prototype属性为之前定义的对象类型增加属性。这为该类型的所有对象,而不是仅仅一个对象增加了一个属性。下面的代码为所有类型为 car 的对象增加了 color 属性,然后为对象 car1 的 color 属性赋值:

Car.prototype.color = null;
car1.color = "black";

可以通过访问对象属性的形式为属性赋值来修改属性或者增加属性。

// 添加一个属性方式一
obj.nickName = "小明"
// 添加一个属性方式二
obj["nickName"] = "小明"
console.log(obj)
// {name: '李明', age: 19, gender: 'man', city: '山东', hobby: '游泳', nickName: "小明"}

可以用 delete 操作符删除一个不是继承而来的属性。下面的例子说明如何删除一个属性:

//Creates a new object, myobj, with two properties, a and b.
var myobj = new Object;
myobj.a = 5;
myobj.b = 12;

//Removes the a property, leaving myobj with only the b property.
delete myobj.a;

相关文章:

  • 图解Redis 记录
  • 网络安全的行业黑话 ——防守篇之软硬件
  • 使用 CubeMX 配置 RCC 时钟
  • CVPR 2022 Oral 大连理工提出的SCI 快速、超强的低光照图像增强方法 可视化代码
  • CVE-2013-4547 Nginx文件名解析漏洞详解
  • 信息收集之 操作系统识别
  • 程序设计——图书管理系统(附源代码)
  • 纯C实现的贪吃蛇(无EaxyX,详解)
  • 布局管理器案例集锦
  • STL 源码阅读笔记-类型萃取(Traits)
  • 【MySQL 第三天数据库表 增删改查】
  • 【白板推导系列笔记】降维-样本均值样本方差矩阵
  • nonebot2聊天机器人插件10:迁移至nonebot2.0.0b5
  • 高速度结构设计
  • Java(六)——常用类 --- 大数运算
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • CSS实用技巧
  • HashMap ConcurrentHashMap
  • interface和setter,getter
  • java中具有继承关系的类及其对象初始化顺序
  • Kibana配置logstash,报表一体化
  • SpiderData 2019年2月16日 DApp数据排行榜
  • spring + angular 实现导出excel
  • SpringCloud集成分布式事务LCN (一)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Yeoman_Bower_Grunt
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 浮动相关
  • 规范化安全开发 KOA 手脚架
  • 阿里云ACE认证学习知识点梳理
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #Linux(Source Insight安装及工程建立)
  • #Spring-boot高级
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (转)http协议
  • .Net Remoting常用部署结构
  • .NET 反射 Reflect
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET基础篇——反射的奥妙
  • .NET开源快速、强大、免费的电子表格组件
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net网站发布-允许更新此预编译站点
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/fstab和/etc/mtab的区别
  • @DataRedisTest测试redis从未如此丝滑
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ABC294Ex] K-Coloring
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Angular] 笔记 6:ngStyle
  • [BROADCASTING]tensor的扩散机制
  • [CF]Codeforces Round #551 (Div. 2)
  • [Django 0-1] Core.Handlers 模块
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件