JavaScript的一座大山—— Object

95 阅读4分钟

The object of JavaScript

前言

这一章文章主要是研究JavaScript的对象以及它的属性,注意这里指的是object对象的属性,有些人会误以为是JavaScript的属性。JavaScript的概念里面一共有三座大山,this,原型以及

概念

javascript 中的对象 (物体),和其它编程语言中的对象一样,可以比照现实生活中的对象来理解它。 javascript 中对象 (物体) 的概念可以比照着现实生活中实实在在的物体来理解。

对象和属性

一个 javascript 对象有很多属性,一个对象的属性可以被解释成一个附加到对象上的变量。对象的属性和普通的 javascript 变量基本没什么区别,仅仅是属性属于某个对象。属性决定了对象的特征,你可以通过“.”符号来访问一个对象的属性。简单的来说,一个对象有很多属性或者说很多变量。就好比一个人有很多种性格特征,他的性格特征也是可以改变的,只是这些特征都属于这一个人。

objectName.propertyName

和其他 javascript 变量一样,对象的名字 (可以是普通的变量) 和属性的名字都是大小写敏感的。你可以在定义一个属性的时候就给它赋值。例如,我们创建一个 myCar 的对象然后给他三个属性,make,model,year。具体如下所示:

和其他 javascript 变量一样,对象的名字 (可以是普通的变量) 和属性的名字都是大小写敏感的。你可以在定义一个属性的时候就给它赋值。例如,我们创建一个 myCar 的对象然后给他三个属性,make,model,year。具体如下所示:

对象中未赋值的属性的值为undefined而不是null,undefined是指我们他的属性值为空,null是没有属性。这两个是不同的概念。

声明对象的两种方式

 obj = {'name': tina ,'age': 18} 
 ojb = new Object {'name':tina,'age':18}

JavaScript 对象的属性也可以通过方括号访问或者设置

myCat["name"] = "wallet";
myCat["color"] = "grey";
myCat["year"] = 1;

对象的属性编辑--增删改查

查看对象属性

查看自身属性:

Object.keys(obj)=Object['key'](obj)
查看属性名
Object.values(obj)
查看属性值
Object.entries(obj)
查看属性名和属性值

查看共有属性:

console.dir(obj)
查看共有属性
obj__proto__
直接打印隐藏属性

注意区分in

'age' in obj;//true
'name' in a=obj//false

in主要是用于查看对象中是否存在这个属性,返回值通常是true or false;

修改和增加

对象直接赋值:

obj.name = ''
可以是空的字符串

对象批量赋值: Object.assign(obj,{age:18,gender:'female'})

window.Object.prototype可以修改原型,但是建议不要修改,否则容易报错出现更多的bug。

删除属性

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

//创建新对象, myobj, 属性a和b.

var myobj = new Object;
myobj.a = 5;
myobj.b = 12;

//删除a这个键名, 留下b这个属性.

delete myobj.a;

构造函数

Object.create 创建新对象,增加原型原型属性

var basic ={'name':'christina','age':18}
let baby=Object.create(basic)
baby.name = 'wallet'
baby.age = '2'
var basic ={'name':'christina','age':18}
var baby =Object.create(basic,{
name:{value:'wallet'}
})

可以直接在构造函数的时候创建新对象的属性;注意花括号以及字符的区分;

new

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

为了定义对象类型,为对象类型创建一个函数以声明类型的名称、属性和方法。例如,你想为汽车创建一个类型,并且将这类对象称为 car ,并且拥有属性 make, model,和 year

var kenscar = new Car("Nissan", "300ZX", 1992);
var vpgscar = new Car("Mazda", "Miata", 1990);

你可以通过调用 new 创建任意数量的 car 对象。

一个对象的属性值可以是另一个对象。例如,假设你按如下方式定义了 person 对象:

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

创建一个person对象;

var rand = new Person("Rand McKinnon", 33, "M");
var ken = new Person("Ken Jones", 39, "M");

创建了新的实例,person为原型的新对象并创建了新的属性;

function Car(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
}

重写car这个对象并且修改函数。

var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
var car2 = new Car("Nissan", "300ZX", 1992, ken);

实则是引用了变量rand 和 ken.

cosnole.dir(car1). 你成功的添加到car1这个对象,并且它的属性值是person对象的属性值;听起来可能很绕,但是多看两遍就能够理解这句话,实则是重复了两遍new的使用。

this

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)">

this主要是指在一个方法或者函数中调用的对象;