js面向对象总结

JS面向对象--创建对象

1.对象的创建及常用的操作

第一种是使用new运算符

例子:var obj = object();
     obj.name = "puyao";
     obj.age = 20;
     obj.address = "四川成都";
第二种是我们常用的字面量

例子:var obj ={
        name ="puyao";
        age = 20;
        address = "四川成都"; 
      };
第三种是简单方式(传统赋值方式)

例子:var obj ={};
     obj.name = "puyao";
     obj.age = 20;
     obj.address = "四川成都";
2.属性的调用

调用的方法:

alert(obj.name + " " +obj.age);//返回“puyao 20”
另一种调用方法:

alert(obj[‘name‘] + " " +obj[‘age‘]);


3.创建对象

例子: var obj = new object();
      obj.name = "puyao";
      obj.age = 20;
      obj.name = "四川成都";

像这样创建一个对象时比较直观的,也是javascript创建对象的基本方法。但是如果要创建
多个对象的时候,像这样的要写很多个,比较麻烦,所以我们用到工厂模式这种方法。


工厂模式的例子:

function createObj(name,age){

      var obj = new object();

      obj.name = name;

      obj.age = age;

      obj.name = address;

      obj.show = function(){

           return this.name + " " + this.age;     
 
};
      return obj;

}

   var obj1 = ("puyao1",20);
   var obj2 = ("puyao2",22);
   alert(obj1.show());
   alert(obj2.show());
 
这个工厂模式方法解决了创建多个对象的难题,但是还是存在一个重要问题,那就是对象识别。以上的代码
根本弄不清楚到底哪个是哪个创建,所以我们就必须用到构造函数的方法来识别。

4.构造函数(构造方法)

例子:  function user(name,age){
         this.name = name;
         this.age = age;
         this.show = function(){
          return this.name + " " +this.age;
 
       };

    }
创建对象的时候用new运算符就可以了

var user1 = new user("puyao1",20);//第一实例
var user2 = new user("puyao2",22);//第二实例

我们可以用instanceof来检验user1或者user2是不是属于user
alert(user1 instanceof user);//true

要创建user对象的新实例,就要用到new操作符,使用这个方法构建实例对象,会经过下面4个步骤

(1)创建一个新对象;

(2)讲构造函数的作用域给新对象(因此this指向这个新对象);

(3)执行构造函数内的代码(在为新对象添加属性);

(4)返回新对象。

还要注意以下的问题

1.构造函数也是函数
区别:构造函数与函数的唯一区别,就是调用方式不同,不过构造函数也是函数,不存在什么特殊的定义构造函数的语法。
任何函数,只要通过new操作符来调用,就可以把它看作函数,而任何函数,如果不通过new操作符调用,它就与普通函数
没有什么区别,例如上面定义的obj.

//当作构造函数调用

var user1 = new user("puyao",20);
user1.show();//puyao 20;

//当作普通函数调用

user("puyao",20);
window.show();//puyao 20;

上面代码显示的结果没有什么区别,只是当作普通函数调用的话,函数里this对象的指向,就是指向window全局对象
而通过new关键字调用,this指向的只是新对象而已。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。