面向对象与原型
1. 创建对象
2. 创建正则表达式
3. 原型
4. 继承
1.普通方法创建对象
//普通创建对象
var box = new Object(); //创建对象
box.name = 'zjw';
box.age = 100;
box.run = function(){
//this代表当前作用域下的对象。就是box,是Object实例化出来的对象。
//this必须放在一个作用域下使用,
return this.name+this.age+'在运动';
}
alert(box.run());
alert(this.name);//这个输出空,因为这个this代表的是window对象。
var name='wjz';//在全局定义的变量数据window
alert(this.name);//这个输出空,因为这个this代表的是window对象。
JavaScript面向对象
ECMAScript有两种开发模式:过程化,面向对象
ECMAScript没有类的概念,因此他的面向对象和其他语言是有区别的。
2.工厂模式创建对象
为了解决多个类似对象的声明,使用工厂模式(集中解决大量对象实例化的方法)。
工厂模式必须有返回值,返回对象引用。
function createobject(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function(){
return this.name+this.age+"再跑";
}
return obj;//工厂模式必须有返回值,返回对象引用。
}
var box1 = createobject("Job",18);
var box2 = createobject("张三",3);
alert(box1.run());
alert(box2.run());
工厂模式解决了重复实例化的问题,但是存在识别问题。
3.构造函数创建对象
//构造函数模式,推荐写法。
//不需要返回对象引用
function Box(name,age){
this.name = name ;
this.age = age;
this.run = function(){
return this.name+this.age+"再跑";
}
}
var box1 = new Box("水",1);
构造函数也是
原型
每个函数都有一个 prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。
逻辑上可以这么理解:prototype通过调用构造函数而创建的那个对象的原型对象。使用原型的好处可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。
function Box(){} //声明一个构造函数
Box.prototype.name='Lee'; //在原型里添加属性
Box.prototype.age=100;
Box.prototype.run=function(){ //在原型里添加方法
return this.name+this.age+'运行中...';
};
1、默认调用的是函数对象本身的属性或方法.
2、通过原型增加的属性或方法的确是存在的.
3、函数对象本身的属性或方法的优先级要高于原型的属性或方法.