首页 > 语言 > JavaScript > 正文

简单分析javascript面向对象与原型

2024-05-06 16:20:42
字体:
来源:转载
供稿:网友

为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念:1.一切事物皆对象,2.对象具有封装和继承特性,3.对象与对象之间使用消息通信,各自存在信息隐藏

本文主要内容参考来自JavaScript高级程序设计,面向对象与原型章节:

1、工厂模式

ECMAScript 可以通过工厂模式来创建对象:

 

 
  1. //工厂模式 
  2. function createObject(name, age) { 
  3. var obj = new Object(); //创建对象 
  4. obj.name = name; //添加属性 
  5. obj.age = age; 
  6. obj.run = function () { //添加方法 
  7. return this.name + this.age + '运行中...'
  8. }; 
  9. return obj; //返回对象引用 
  10. }; 
  11. var obj1 = createObject('Lee', 100); //创建第一个对象 
  12. var obj2 = createObject('Jack', 200); //创建第二个对象 
  13. //alert(obj1.run()); //打印第一个对象实例的run()方法 
  14. //alert(obj2.run()); //打印第二个对象实例的run()方法 
  15.  
  16. //alert(typeof obj1); 
  17. //alert(typeof obj2); 
  18. alert(obj1 instanceof Object); //true 
  19. alert(obj2 instanceof Object); //true 

通过工厂模式创建的对象,解决了重复实例化问题,但对象识别问题无法解决(所有对象均是Object),因此要想解决对象识别问题,我们采用下面的构造函数。

2、构造函数

 

 
  1. //构造函数创建 
  2. function Person(name,age){ //所有构造函数对象都是Object 
  3. this.name=name; 
  4. this.age=age; 
  5. this.run=function(){ 
  6. return this.name+this.age+"ing..."
  7. }; 
  8. }; 
  9. var person1=new Person('zhu1',100); 
  10. var person2=new Person('zhu2',200); 
  11. alert(person1.run()); 
  12. alert(person2.run()); 
  13.  
  14. alert(person1 instanceof Object); //ture 
  15. alert(typeof person2); //Person 
  16. alert(person2 instanceof Person); // true 
  17. var person3=new Object(); 
  18. Person.call(person3,'zhu3',300);//对象冒充,person3是Object类型,冒充Person类型 
  19. alert(person3.run());  

构造函数中this:代表当前作用域对象的引用,如果在全局范围this代表window对象,如果在构造函数体内,就代表当前构造函数所声明的对象。

构造函数方法,及解决了重复实例化问题,有解决了对象识别问题,对比跟工厂方法不同之处可知:

1.构造函数方法没有显示的创建对象(new Object());

2.直接将属性和方法值赋值给this;

3.没有return 语句;

4.但是使用构造函数创建必须使用new运算符;

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选