JS === 面向对象 总结
Posted rabbit-lin0903
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS === 面向对象 总结相关的知识,希望对你有一定的参考价值。
创建对象
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 === 面向对象 总结的主要内容,如果未能解决你的问题,请参考以下文章