JavaScript中什么是对象,对象的种类已经如何创建对象

275 阅读5分钟

在 JavaScript 中,对象是数据(变量),拥有属性和方法。

JavaScript 中的几乎所有事务都是对象:字符串、数字、数组、日期、函数,等等。

在 JavaScript 中,对象是拥有属性和方法的数据。

属性和方法

属性是与对象相关的值。

方法是能够在对象上执行的动作。

创建对象

 let obj=new Object();

对象的属性

  obj.name="hu";
  obj.age=18;

对象的方法

obj.say=function () {
    console.log("hello");
}

访问对象的属性:obj.name、obj.age

console.log(obj.name);
console.log(obj.age);

访问对象的方法

obj.say();

在 JavaScript 中,对象的种类有以下四种。

1.本地对象

与宿主无关,无论在浏览器还是服务器中都有的对象,就是ECMAScript标准中定义的类(构造函数)在使用过程中需要我们手动new创建例如: Boolean、 Number、 String、Array、 Function、0bject、Date、RegExp以及各种错误类对象,包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError。

2.内置对象

ECMAScript已经帮我们创建好的对象在使用过程中无需我们手动new创建例如: Global、Math、JSON

3.宿主对象(宿主就是指 JavaScript运行环境)

宿主对象就是执行JS脚本的环境提供的对象。对于嵌入到网页中的JS来说,其宿主对象就是浏览器提供的对象,所以又称为浏览器对象,如IE、Firefox等浏览器提供的对象。不同的浏览器提供的宿主对象可能不同,即使提供的对象相同,其实现方式也不同。这会带来浏览器兼容问题,增加开发难度。浏览器对象有很多,如window和documen,element,form,image等等。

4.自定义对象

顾名思义,就是开发人员自己定义的对象。JS允许使用自定义对象,使JS应用及功能得到扩充。

自定义创建 JavaScript 对象

JavaScript 中的几乎所有事务都是对象:字符串、数字、数组、日期、函数,等等。

你也可以创建自己的对象。

实例如下:

let obj=new Object();

对象的属性

  obj.name="hu";
   obj.age=18;

对象的方法

   obj.say=function () {
    console.log("hello");
}

js中包含九个原生(或内置)对象构造函数(都可以用来创建对象)。

这里面的原生对象构造函数除了RegExp()和Error()外,其他都含有constructor和prototype属性,所以通过这些原生对象构造函数创建出来的对象也都含有这两个属性。

constructor属性:返回对创建此对象的构造函数的调用

prototype属性:可以通过这个属性向对象添加公有的属性和方法

1.Number();

 var a=10;  //这里的a属于Number基本数据类型,也是对象;对象a拥有了Number()构造函数中的属性和方法。

等价于

var a=new Number(10);  

2.String();

var str=’abc’;  //这里的str属于String基本数据类型,也是对象;对象str拥有了String()构造函数中的属性和方法。

等价于

var str=new String(‘abc’); 

3.Boolean();

var boo=true;  //这里的str属于Boolean基本数据类型,也是对象;对象boo拥有了Boolean()构造函数中的属性和方法。

等价于

var boo=new String(true);  

4.Object(); 用于自定义对象

创建少量的对象,每个对象独立地创建

第一种创建方式

   let obj=new Object();
   obj.name="hu";
   obj.age=18;
   obj.say=function () {
   console.log("hello");
 } 
 console.log(obj.name);
 console.log(obj.age);
 obj.say();

第二种创建方式

let obj={};
obj.name="hu";
obj.age=18;
obj.say=function () {
    console.log("hello");
    }
console.log(obj.name);
console.log(obj.age);
obj.say();

第三种创建方式

let obj={
    name:"hu",
    age:18,
    say:function () {
    console.log("hello");
    }
};
console.log(obj.name);
console.log(obj.age);
obj.say();

需要创建大量对象,使用公共的工具来创建对象

1.工厂函数

//工厂函数就是专门用来创建对象的函数。
let createPerson=function (myName,myAge) {
    let obj=new Object();
    obj.name=myName;
    obj.age=myAge;
    obj.say=function () {
        console.log("hello");
    };
    return obj;      //需要返回一个对象
};
let obj1=createPerson("hu",23);
let obj2=createPerson("yang",22);
console.log(obj1);
console.log(obj2);

构造函数1

function Person(myName,myAge) {
// let obj=new Object();  系统自动添加
//let this=obj;    系统自动添加
this.name=myName;
this.age=myAge;
this.say=function () {
console.log("hello");
}
// return this;   系统自动添加
};
let obj1=new Person("hu",23);
let obj2=new Person("yang",22);
console.log(obj1.say===obj2.say);   //false
//由于两个对象中的say方法实现是一样的,但是保存到了不同的存储空间,所以有性能问题

构造函数2

function Person(myName,myAge) {
// let obj=new Object();  系统自动添加
//let this=obj;    系统自动添加
this.name=myName;
this.age=myAge;
// return this;   系统自动添加
};
Person.prototype={     //构造函数的默认属性
    say:function () {
        console.log("hello");
    }
};
let obj1=new Person("hu",23);
obj1.say();
let obj2=new Person("yang",22);
obj2.say();
console.log(obj1.say===obj2.say);    //true

5.Array();

使用关键词 new 来创建数组对象。下面的代码定义了一个名为 myArray 的数组对象:

var myArray=new Array()

有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定义你需要的任意多的变量一样)。

1.这里的mycars是数组对象

var mycars=new Array()
mycars[0]="Saab"
mycars[1]="Volvo"
mycars[2]="BMW"

也可以使用一个整数自变量来控制数组的容量:

var mycars=new Array(3)
mycars[0]="Saab"
mycars[1]="Volvo"
mycars[2]="BMW"

2.这里的mycars是数组对象

var mycars=new Array("Saab","Volvo","BMW")

6.Function();

Function构造函数创建一个新的Function对象。在 JavaScript 中, 每个函数实际上都是一个Function对象。

var sum = new Function('a', 'b', 'return a + b');

等价于

function sum(a,b){
return a+b;
}

7.Date();

Date 对象用于处理日期和时间。

创建 Date 对象的语法:

var myDate=new Date()

注释:Date 对象会自动把当前日期和时间保存为其初始值。

8.RegExp();

RegExp 对象用于存储检索模式。

通过 new 关键词来定义 RegExp 对象。以下代码定义了名为 patt1 的 RegExp 对象,其模式是 "e":

var patt1=new RegExp("e");

当使用该 RegExp 对象在一个字符串中检索时,将寻找的是字符 "e"。

9.Error();

这是我写的第一篇文章,内容是结合一些文档和自己理解所写的,请多多指教!