一、什么是对象?
对象在各个语言中都存在,其他语言使用类创建对象,创建的对象不能随便增删改查属性和方法,但是在js中没有类的概念而是通过原型(原型的详解)的方式进行对象的创建,原型的存在就使得js创建的对象灵活,可以随时进行增删改查属性,这样js对象的功能就很强大了
二、如何创建对象
2.1 构造函数创建
构造函数和普通函数没任何区别,对于一个函数使用new 函数名()代表是构造函数, 函数名()这种方式是直接调用函数,为了给程序带来更好的维护,建议构造函数首字母大写
2.1.1 系统方式创建
1)如何创建<br />系统自带的构造函数(相当于工厂,工厂可以批量的产出对象,每一个对象虽然一样(属性方法一样)但是相互独立(使用的不是同一个内存空间))<br />例如:var object= new Object();//执行一次生成一个长得一样的双胞胎,<br />注意:var object= new Object()和var object ={},这两种创建方式是一样的但是也存在区别。区别一:增 删改查的时候不再使用:而是通过=取而代之<br />2)什么时候使用<br />这种方式开发中很少使用,缺点很明显,创建一个对象就需要写很多重复代码,耦合性太强完全违背了代码的封装性。
2.1.2 自定义创建
1)如何创建
下面是创建对象的过程,这种方式生产的对象功能都是一样的,
function Car (){this.name = "BMW",this.width ="1400",this.health=100,this.run =function(){this.health--;}}var car = new Car();var car1 = new Car();//这两个对象类似于双胞胎,后期根据不同的增删改查越来越不像
但是现实生活中不是这样的,很多人可能有自己的需求,就像买国外车一样可以自己定制。就像下面我们通过参数增加灵活性
function Car (color){this.color = color,this.name = "BMW",this.width ="1400",this.health=100,this.run =function(){this.health--;}}var car = new Car('red');var car1 = new Car('green');

2)构造函数原理:
有了new之后,在函数最顶端生成var this ={},(作用域A0就会产生this变量),然后按照步骤复制,然后隐士return this。
function Car (color){//注释的代码就是new之后做的操作// var this ={// color:color,// name:"BMW",// width:"1400",// health:"1000",// run:function(){// this.health--;// }// }this.color = color,this.name = "BMW",this.width ="1400",this.health=100,this.run =function(){this.health--;}// return this;}var car = new Car('red');var car1 = new Car('green');
注意:如果显示的返回一个对象就会改变生成对象的结果,如果返回基本数据类型不起作用
2.2 对象字面量(结合原型的属性可被继承,这种方式常用)
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><script>//创建对象var taowuhua = {prepareWife: "mafengshui",name: "sanling",age: 18,girlFriend: "xiaoliu",wife: '',divorce: function () {delete this.wife;this.wife = this.prepareWife},getMarried: function () {this.wife = this.girlFriend;},changeGf: function () {}}</script></body></html>
这种方式的注意点
1)参数的格式是这样的 属性:值,和构造函数区分开,构造函数声明方式是this.属性=””.这里产生的原因是new 构造函数之后捣的鬼
2)如果方法访问对象里面的属性需要使用this关键字,此时的this代表我的
3) 对象.方法名,此时仅仅是获取到函数表达式,需要加上执行符号双括号(),函数才会执行
2.3 object.create方式创建
2.3.1 语法格式
var obj= object.create(原型对象)
例子:
Car.prototype={name : "BMW",width :"1400",health:100,run : function(){this.health--}}function Car (){}var car = Object.create(Car.prototype)
三、属性的增删改查
属性的增加:直接调用对象名 .属性值 例如:taowuhua.hobit=”learning”
属性的删除:delete 对象.属性 例如:delet taowuhua.wife
属性的修改:对象.属性 =“” 例如:taowuhua.name =”务华”
属性的查找: 直接调用对象.属性 例如 taowuhua.age
四 包装类
原始值没有属性和方法,他们会先进行原始类型对象转换
例如: var num =4
num .length =3;//=> new Number(4).length=3
console.log(num.length) //=>new Number(4).length=””
