JavaScript之JavaScript对象及包装类

 说道对象,我想起了在其它语言上说的一句话---万物皆对象,在世间任何一个东西都有它自己的属性和特别方法,

这里可以说它自己的用途。

JavaScript对象

 最基础的对象需要明白:1.对象的定义、2.对象属性的增删改查、3.对象的创建方法。

一、对象的定义

 定义对象:对象的定义中既可以有属性也可以有方法。

var obj = {
name : "wang",
age  : "20",
eat  : function(){
console.log("123");
}
} 


二、对象属性的增删改查

 1.增。

 对象属性的增加,比如说向obj对象中增加一个sex属性。

obj.sex = "sex";

 增加对象属性后面必须有值。


 2.删

  删除对象属性用到delete方法

delete obj.sex;

 

3.改

 修改对象属性值

obj.name = "zhou";

 

4.查

 查找对象属性:访问对象属性和方法使用对象.属性名(方法名) 

obj.name;
obj.eat();

 当一个变量没定义会报错,当一个属性没定义查询会返回undefined。

 三、对象的创建方法

 对象的创建方法有两种:一种是对象字面量的创建方法、一种是构造函数的创建方法。

1.对象字面量

var obj = {};

 这种方法就是我上述说的那种方法。

 

2.构造函数。

 在系统中有一个系统自带的构造函数:Object(),我们以这个构造函数为基,创建对象,这种创建方法属性值是自己加的

就是上文对象的增功能。

var obj = new Object();
obj.name = "";  //对象属性自己增加
obj.age = ""

 也可以自己写自己的构造函数。这里我们看,构造函数,它也是个函数。其实它和普通的函数没有任何区别。

唯一的区别就是构造函数在书写的时候采用大驼峰式书写规则---TheFirstName。

 

this

  在对象中通常会写this.XXX 什么的。在对象中this指的就是对象本身。

  我认为我最能记住的就是一句话:this指向当前对象。当前对象就是this所处环境中的对象。

 接下来以这种方法写一个构造函数。

function Person(){
this.name = "";
this.age = "";
this.eat = function(){};
}
var person1 = new Person();
var person2 = new Person();
//这样person1和person2都具有了Person的属性和方法

 自定义的构造函数而且可以传参

function Person(name,age){
this.name = name;
this.age = age;
this.eat = function(){};
}
var person1 = new Person("wang",20);
var person2 = new Person("zhou",19);

 构造函数的内部原理

1.在逻辑的最顶端会生成一个this对象:var thsi ={};

2.然后把自定义添加的this.属性添加到this对象中:执行this.XXX = “XXX”;

3.隐式返回this;

function Person(name,age){
this.name = name;
this.age  = age;
//隐式返回this
//如果在这里手动添加一个return {}是不会错的 但是添加 return XX;XX不是对象这就错了,隐式返回值决定这个返回值必须是对象
}
var person1 = new Person("wang",20);

 包装类

  在JavaScript里面有包装好的类:Number()、String()、Boolean()

  在JS代码中只要是原始值是不可以有属性和方法的

 在上述三个中的Number()数字对象是可以参与运算的,但是参与运算之后就变成了数字不是对象。

在JS代码中我们有时候要执行它的方法,这时候我们就调用包装类,当用到方法和属性的时候,

这时候会调用包装类,调用之后就会被delete掉。

var str = "abcd";
str.length = 2;
console.log(str.length);

 在上述代码中因为str是原始值不能有属性和方法,在调用length属性的时候,系统会调用String()包装类

  var str = new String("abcd"); 这时候把str.length = 2;然后delete掉。

  当下一步console.log(str.length);时候再次调用String()包装类,var str = new String("abcd");

 此时的长度会按照新的类进行检测。所以输出是4。

给大家分享一个题:

var str = "abc";
str += 1;
var test = typeof(str);
if(test.length == 6)
{
test.sign = "typeof的结果返回的可能是String";
}
console.log("test.sign");
//求输出的是什么??

这道题的答案是undefined。这道题和上一题的思路是一样的,但考察的知识点有前面的一点。开始,str += 1

是考察的前面的隐式类型转换,如果不会的话,点击这里。形成abc1这样的字符串。 下一行typeof返回的是string

此时的test的值为string,再下一行test调用String()包装类,动手指头数一下,string是6个字母,此时test.length为6

正确,test包装类delete掉,进入if语句里面。再次调用包装类,注意这个包装类和上面那个不同,是一个全新的。

把后面一串字符串赋值到test.sign里面。再次delete掉。执行console.log()输出。再次调用包装类,此时的这个包装类

是和上面两次包装类没有任何关系,此时的类里面 var test = new String("string");没有任何属性和方法,test.sign

 相当于查看test.sign属性。但是里面没有,所以返回undefined。


JavaScript语言我个人感觉是最有意思的了,我也是一个初学者,遇到问题,喜欢在博客上分享,
也希望能帮到大家。 一个初学者,有什么不足或者纰漏的话,希望在下面评论出来,相互学习,共同进步。
  --主页传送门--
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值