javascript面向对象程序设计
10726 点击·1 回帖
![]() | ![]() | |
![]() | 在学习js面向对象编程之前,首先需要知道什么是面向对象。面向对象语言都有类的概念,通过它可以创建具有相同属性和方法的对象。但js并没有类的概念,因此js中的对象和其他语言的对象有所不同。
js对象可以定义为:”无需属性的集合,其属性可以是基本值、对象和函数。每个对象都是基于一个引用类型创建的。 js创建对象有以下两种方法: 1、创建一个Object实例: ? 1 var person = new Object(); 2、使用对象字面量: ? 1 var person ={}; 3、工厂模式: ? 1 2 3 4 5 6 7 8 9 function createPerson(name,age,job){ var p = new Object(); p.name=name; p.age=age; p.job=job; return p; } var p1=createPerson("jack",22,“front-end Engineer"); var p2=.....; 4.构造函数模式: ? 1 2 3 4 5 6 7 8 function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=function(){alert(this.name);}; } var p1= new Person("jack",22,"front-end Engineer"); var p2=...; 这里暂停一下,因为构造函数模式比较重要,这里解释一下:这里实际上是经历了以下4个步骤: (1)创建一个对象; (2)将构造函数作用域赋给这个对象(所以this将指向这个新创建的对象) (3)执行里面的代码,为新对象添加属性; (4)返回新对象; 上面创建的p1和p2都有一个constructor的属性,它指向Person。并且p1和p2即使Person的实例,同时也是Object的实例,因为所有对象都继承自Object。 缺陷:每个方法都要在实例上重新创建一遍,js中的函数是对象,因此可以将函数转移到构造函数的外部: ? 1 2 3 4 5 6 7 8 9 10 11 function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=sayName; } fucntion sayName(){ alert("this.name"); } var p1=.....; var p2=....; 5.原形模式: 我们创建的函数都有一个prototype属性,它是一个指向一个对象的指针。 | |
![]() | ![]() |