js 操作java对象_JavaScript 对象基础

JavaScript 对象基础

JavaScript 对象的基本形式、对象的创建方式、构造函数、包装类等

对象的格式

基本格式

对象使用一个{}进行包裹,内部属性以键值对形式声明

示例 var teacher = {

name: "pgjett",

age: "22",

teach: function () {

console.log("I teach javascript");

},

drink: function () {

console.log("I drink beer");

}

}

对象的的属性

属性的增删改查 var teacher = {

name: "pgjett",

var teacher = {

name: "pgjett",

age: "22",

teach: function() {

console.log("I teach javascript");

},

drink: function() {

console.log("I drink beer");

}

}

// 增加

teacher.smook = function(){

console.log("I smook");

}

// 删除

delete teacher.name;

// 改变

teacher.teach =function() {

console.log("I teach java");

}

// 查找/访问

console.log(teacher.name);

console.log(teacher["name"]);

// 最早的 JS 引擎使用 obj["name"] 访问

// 使用 obj.name 会自动转换成 obj["name"]

对象方法访问属性

一般将普通函数称之为函数,对象内的函数称之为方法 var teacher = {

name: "pgjett",

age: "22",

weight: "65",

teach: function() {

console.log("I teach javascript");

},

eat: function() {

this.weight++;

console.log("I eat, my weight is " + this.weight);

}

}

teacher.eat();

带参数的对象方法 var attendance = {

students: [],

join: function(name) {

this.students.push(name);

console.log(name + " 已到课");

},

leave: function(name) {

var idx = this.students.indexOf(name);

if (idx != -1) {

this.students.splice(idx, 1);

console.log(name + "早退");

}

}

}

attendance.join("张三");

attendance.join("李四");

attendance.join("王五");

attendance.join("赵六");

attendance.join("孙七");

attendance.leave("李四");

// 张三 已到课

// 李四 已到课

// 王五 已到课

// 赵六 已到课

// 孙七 已到课

// 李四早退

对象的创建方式

对象字面量

也叫对象直接量 var obj = {

name: "Jett",

age: 22""

}

内置构造函数

使用 new Object(),与对象直接量没什么区别 var obj = new Object();

obj.name = "Jett";

obj.age = "22";

自定义构造函数

自定义构造函数使用大驼峰命名,通过 new 创建对象实例,且 new 出的示例是不同对象,有各自的属性

自定义构造函数是 javascript 模块化、插件化的重要内容 function Teacher(){

this.name = "Jett";

this.age = 22;

this.teach =function(){

console.log("I teach javascipt");

}

}

var teacher1 = new Teacher();

var teacher2 = new Teacher();

teacher2.name = "John";

console.log(teacher1);

console.log(teacher2);

// Teacher{name: "Jett", age: 22, teach: teach(){}}

// Teacher{name: "John", age: 22, teach: teach(){}}

自定义构造函数传入参数 function Teacher(opt) {

this.name = opt.name

this.age = opt.age;

this.teach = function() {

console.log("I teach " + opt.course);

}

}

var teacher1 = new Teacher({

name: "Jett",

age: 22,

course: "javascript"

});

var teacher2 = new Teacher({

name: "John",

age: 25,

course: "java"

});

构造函数原理

this 的指向

不使用 new,直接执行,根据预编译原理,this 默认指向 window

在全局作用域中,this 代表 window function Car() {

this.color = "red";

this.brand = "BMW";

}

Car();

console.log(window.color);

console.log(this.color);

// red

// red

使用 new 实例化对象,this 指向该实例 function Car() {

this.color = "red";

this.brand = "BMW";

}

var car = new Car();

console.log(car.color);

this 转变的过程

当 new 一个构造函数时,就相当于该构造函数执行,它的 AO 中会有一个 this 指向一个默认的属性

当执行 this.color = "red";

this.brand = "BMW";

相当于在 this 上添加属性

使用 new 关键字后会将 this 抛出,赋值给一个引用

这就是一个实例对象,这个实例可以访问 color、brand 属性

构造函数中的 return

new 一个构造函数默认会隐式 return this

如果显式 return 一个原始值,实例对象不受影响

如果显式 retrn 一个引用值,new 出的实例将指向该引用值 function Car() {

this.color = "red";

this.brand = "BMW";

return 1;

}

var car = new Car();

console.log(car.color);

// red

包装类

Number

通过构造函数创建数字对象,可以设置属性

在运算中可以自动解包装

与此类似的还有 String,Boolean var a = new Number(1);

a.name = "a";

console.log(a);

console.log(a + 1);

// 打印

// Number{1, name: "a"}

// 2

原始值自定义方法和属性,每次访问都会被包装成相应类型的对象,仅仅是临时容器,执行后则销毁,再次访问又重新包装,只能访问到 undefined var a = 1;

a.name = "a";

// js 引擎将 a 包装成数字对象,

// 即 new Number(a).len = 3

// 临时容器没有变量保存,执行 delete,删除该 len 属性

console.log(a.name);

// 即 console.log(new Number(a).len)

// 打印 undefined

String

字符串原始值并没有 length 属性,实际上是包装成字符串对象后访问 length 属性 // js 引擎将 "123" 包装成字符串对象

var str = "123";

str.length = 1;

// 即 new String(str).length = 1;

console.log(str.length);

// 即 console.log(new String(str).length)

// 打印 3

对象链式调用

通过 return this 将对象抛出,以调用其他函数

```javascript

var sched = {

marning:function(){

console.log("marning studying");

return this;

},

noon:function(){

console.log("noon sleeping");

return this;

},

afternoon:function(){

console.log("afernoon shopping");

return this;

}

}

sched.marning().noon().afternoon();

```

对象枚举

for in 遍历对象属性 var obj = {

name: "Jett",

age: 22,

address: "安徽"

}

for( var key in obj) {

console.log(key, obj[key]);

}

// name Jett

// age 22

// address 安徽

用 in 判断对象是否有某个属性 var obj = {

name: "Jett",

age: 22,

address: "安徽"

}

console.log("name" in obj);

// true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值