码迷,mamicode.com
首页 > Web开发 > 详细

JS === 面向对象 总结

时间:2019-07-23 00:23:04      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:nbsp   struct   返回   总结   定义   缺点   实例化   col   turn   

创建对象

1.工厂模式

  function createPerson(name,age,job){

    var o = new Object();

    o.name = name;

    o.age = age;

    o.job = job;

    o.sayName = function(){

    alert(this.name);

  };

  return o;

  }

 

var person1 = createPerson("Emily",21,"software Engineer") ;

采用工厂模式虽然解决了创建多了相似对象的问题,但是却没有解决对象识别的问题(即怎样知道一个对象的类型)

 

2.构造函数模式

  function Person(name,age,job){

    this.name = name;

    this.age = age;

    this.job = job;

    this.sayName = function(){

      alert(this.name);

    };

  }

var person1 = new Person("Emily",22,"software engineer");

1. 没有显示的创建对象

2.直接将属性和方法赋给了this对象

3.没有return 语句

以这种方式调用构造函数实际上会经历以下4个步骤:

1)创建一个新对象;

2)将构造函数的作用域赋给新对象(this就指向了这个新对象);

3)执行构造函数中的代码

4)返回新对象

缺点:

每个实例都会有一个方法,但是这些方法不是同一个function的实例。函数也是对象,因此每次定义一个函数,也就是实例化了一个对象。

 

3.原型模式

  function Person(){

}

  Person.prototype.name = "Emily";

  Person.prototype.age = 20;

  Person.prototype.job = "SoftWare Engineer";

  Person.prototype.sayName = function(){

    alert(this.name);

};

  var person1 = new Person();

属性和方法,均放在原型中,而原型模式:共享属性。

当创建一个实例时候,会能够访问到原型中的属性和方法,而该实例如果修改了原型中的属性和方法,也会影响到其他的实例。

 

4. 组合使用构造函数模式 和 原型模式

  function Person(name,age,job){

    this.name = name;

    this.age = age;

    this.job = job;

}

  Person.prototype = {

  constructor : Person;

  sayName : function(){

    alert(this.name);

  }

}

 

var person = new Person("Emily" , 22,"Software Engineer")

 

  构造函数中定义实例属性,原型中定义共有的属性和方法。

JS === 面向对象 总结

标签:nbsp   struct   返回   总结   定义   缺点   实例化   col   turn   

原文地址:https://www.cnblogs.com/rabbit-lin0903/p/11229110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!