来聊一聊你的对象,搞懂了对象,你就明白了JS

43 篇文章 0 订阅
33 篇文章 0 订阅

我们之前介绍数据类型的时候,提到对象是一种数据类型,后来,我们在介绍其他数据类型的时候,我们说,所有的数据类型其实都是对象。所以,所有的数据类型都有属性和方法。在JS里,不光数据类型是对象,所有的东西都可以认为是对象,包括函数等等。为什么这么说呢?

JavaScript最核心的东西就是对象了。搞懂了对象,你才能说明白了JavaScript。

对象的内容还是挺多的。理解起来算是JS的难点吧。

把对象当做一种数据类型来认识,只是对象内容的一小部分。

对象是贯穿整个JavaScript语言的。

前面我们学习了,定义一个对象,可以用{}来声明。比如:

var a = {};

这样,变量a就是一个对象了。我们可以给a设定属性和方法。这是定义对象最简单的一种方式。如果程序简单的话,我们推荐用{}的方式来声明对象。

当然,也可以用new的方式。比如:

var a = new Object();

{}声明是一样的效果。从效率和写法更简洁方面来考虑,我们推荐使用{}

所有的数据类型声明的时候,都可以使用new的方式来声明,但是,我们都不推荐。用字面量的形式就好。

除了我们知道的字面量和new的形式可以创建对象,我们还可以通过定义对象构造器来创建构造类型的对象,还可以通过Object.create()函数 来创建对象。不管用哪种方式创建对象,结果都是一样的。
JS创建对象的原理和创建原始数据类型是不一样的。

什么是原始数据类型?

原始值指的是没有属性或方法的值。比如:

数值:100
字符串:"刘小妞"
布尔值:true

原始值是不能修改的。

原始数据类型指的是拥有原始值的数据。

JS定义了5种原始数据类型。

string、number、boolean、null、undefined

JS在创建原始数据类型的时候,是创建了一个值。比如:

var a = 100;
var b = a;
b = 200;
alert(a); //a的值为100

b的更改并不会影响a的值,b是a的一个副本。

JS在创建对象的时候,是创建了一个地址。比如:

var a = {"test":"123"};
var b = a;
b.test = "456";
alert(a.test); //a.test的值为456

b对象里属性的改变会影响到a对象里的属性。地址只创建一次,当赋值给多个变量的时候,变量通过指针的形式指向对象。如下图:

在这里插入图片描述

  • JavaScript 对象访问器

JS对象定义了两个访问器:GetterSetter

我们知道,对象的方法其实就是放在对象里的函数,我们可以通过对象.方法();的形式来访问对象的方法。

在对象里,还可以设定访问器,Getter是获取,Setter是设置。用法如下:

<p id="demo"></p>

<script>
// 创建对象:
var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "en",
  get lang() {
    return this.language;
  }
};
// 使用 getter 显示来自对象的数据:
document.getElementById("demo").innerHTML = person.lang;
<p id="demo"></p>

<script>
// 创建对象:
var person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "en",
  set lang(value) {
    this.language = value;
  }
};
// 使用 set 设置属性:
person.lang = "zh";
// 显示对象的数据:
document.getElementById("demo").innerHTML = person.language;

这样,我们就可以像访问属性一样来访问方法了。

  • JavaScript 对象构造器

我们之前用的字面量或者new的方法,只能创建单一的对象。比如:

var a = {'name':'小明',"age":18};
var b = {"name" : "小红","age":16};

a和b的结构相同,属于同一类,但是,像上面的创建方式,a和b并没有任何关联,是两个独立的对象。当我们想对它们进行统一管理的时候,就会很麻烦,比如,我们想让a和b都加上性别字段,这个时候,我们需要分别给a和b加上性别字段,这样维护起来就很麻烦。这个时候,我们就要考虑用对象构造器来更好的解决这个问题。

对象构造器就是构造函数,它是创建对象的一种方式。比如上面的例子,我们创建一个Person对象构造器:

// Person 对象的构造器函数
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 创建 Person 对象
var a = new Person('小明',18);
var b = new Person("小红",16);

这样,a和b就有了关联,它们同属于Person这个类,就好像找到了组织一样。需要添加公共的属性和方法,在构造器函数里添加就可以了,每个对象又可以添加自己的属性和方法。比如:

<p id="demoa"></p>
<p id="demob"></p>

<script>
// Person 对象的构造器函数
function Person(name, age,sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
  this.showme = function(){
    return "我叫" + this.name + '年龄' + this.age;
  }
}

// 创建 Person 对象
var a = new Person('小明',18,'男');
document.getElementById("demoa").innerHTML = a.showme();

var b = new Person("小红",16,"女");
document.getElementById("demob").innerHTML = b.showme();

</script>

也可以给单个对象添加属性和方法,比如:

a.like = "唱歌";
b.reading = function(){return 'JavaScript';};

单个对象添加的属性和方法属于单个对象自己。
构造器函数里添加的属性和方法属于所有对象。

构造函数的名称我们通常首字母大写。比如,我们很熟悉的一些对象:String、Number、Array、Object等等,都是首字母大写,其实,它们是JS内建的构造器函数。

我更倾向于把对象构造器函数理解成一个类。具有相同特性的,我们可以称为一类,在JS里,具有相同数据结构的,我们也可以称为一个类。对象是类的一个实例化。

现在,你对“对象”了解了吗,是不是能很快的就搞定呢?
如果想看更多关于前端知识的文章,欢迎微信搜索公众号:“刘小妞的栖息地”或者识别下图的二维码查看。感谢大家的支持。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值