欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript对象

程序员文章站 2022-04-24 23:06:21
...

JavaScript对象的创建

1.直接使用{}

var obj={
   name:"孙悟空",
   age:18,
   sayname:function(){
    console.log(this,name);
   }
  };

向{}直接添加对象属性即可。
当需要创建大量相似对象时,显然就需要创建大量对象,不方便生产大批量对象。

2. 工厂模式

 function creatperson(name,age,job){
     var obj=new Object();
     obj.name=name;
     obj.age=age;
     obj.job=job;
     obj.sayname=function(){
      console.log(this.name);
     }
     return obj;
    }

用函数直接封装。
函数createPerson()能根据接受的参数来构建一个包含所有必要信息的Person对象。工厂方法虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题。

var obj3=creatperson("孙悟空",18,"Software Engineer");
console.log(obj3);
var obj4=creatperson("猪八戒",28,"Doctor");
 console.log(obj4);

JavaScript对象

3.构造函数

function Person(name,age,gender){
     //当用构造函数创建对象this就是创建的对象
  this.name=name;
  this.age=age;
  this.gender=gender;
  this.sayname=fun33;
    }

本质就是用new操作符调用一个普通函数。
要创建Person的新实例,必须使用new操作符,以这种方式调用构造函数实际上会经历一下四个步骤:
1.立刻创建一个新的对象
2.将新建的对象设为函数中的this
3.逐行执行函数的代码
4.将新建的对象作为返回值返回

var per1 =new Person("猪八戒",18,"男");
console.log(per);

而这种方法能检测对象类型
JavaScript对象
同样这个对象里保存了一个constructor(构造函数)属性

 alert(per.constructor==Person);

JavaScript对象
构造函数与其他函数唯一的不同就是调用它们的方式不同。不过,构造函数毕业也是函数,不存在定义构造函数的特殊语法。任何函数,只要通过new操作符来调用,那它就可以作为构造函数。

4.原型模式

我们创建的每个函数都有一个prototype(原型)属性 (因为函数也属于对象,所以具有属性),这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
我们先查看上面per对象的原型对象

console.log(per.__proto__);//谷歌叫__proto__

JavaScript对象
我们再向这个对象里面添加一个属性再查看一次

per.__proto__.a=23;
    console.log(per.__proto__);

JavaScript对象
接着再创建一个相同类型的对象来访问这个a属性

var per2=new Person("孙悟空",20,"男");
    console.log(per2.a);

JavaScript对象
说白了,原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象。这个原型对象也有一个constructor属性用法与上面一致不过是共享的。
所以我们就可以将对象中公有的内容 统一设置到原型对象中。
当我们使用一个方法的属性或原型时 先在自身寻找 如果有直接调用

  • 没有则去原型里找 还没有则去原型的原型寻找
  • 直到找到Object的原型 Object对象的原型没有原型

js里面的对象都有这个Object原型对象和Java里面每个类的父类都是Object

最后二种方法
js里面的静态方法
直接添加到类里面就是静态方法
实例方法
是添加到类的原型就是实例方法

//1.定义一个类
   function AClass(){
          
   }
   //2.给这个类添加一个静态方法
   AClass.staticMthod=function(){
          alert("静态方法通过类名调用");
   }
   AClass.staticMthod();
   //3.给这个类添加一个实例方法
   AClass.prototype.instanceMethod=function(){
    alert("实例方法");
   }
   //实例方法通过类的实例调用
   //创建一个实例(创建一个对象)
   var a=new AClass();
   a.instanceMethod();