第四章 JavaScript面向对象
JavaScript中的数据类型
number(数值类型)
string(字符串类型)
boolean(布尔类型)
null(空类型)
undefined(未定义类型)
object(对象类型)
对象的概念是什么?如何创建对象?
对象是包含相关属性和方法的集合体 属性 方法
Object对象的方式创建对象 var 对象名称=new Object( );
var person=new Object();
person.name="小明";
person.sex="男";
person.age=18;
person.hobby="看书、看电影、健身、购物等";
person.showName=function(){
alert(this.name);}
person.showName();
使用字面量赋值方式创建对象
var person={
name:"小明",
sex:"男", age:18,
hobby:"看书、看电影、健身、购物等",
showName:function(){ alert(this.name);}
}
person.showName();
原型链
一个原型对象是另一个原型对象的实例
相关的原型对象层层递进,就构成了实例与原型的链条,就是原型链
function Humans(){
this.foot=2;
}
Humans.prototype.getFoot=function(){
return this.foot;
}
function Man(){
this.head=1;
}
Man.prototype=new Humans(); //继承了
Humans Man.prototype.getHead=function(){
return this.head;
}
var man1=new Man();
alert(man1.getFoot()); //2
alert(man1 instanceof Object); //true
alert(man1 instanceof Humans); //true
alert(man1 instanceof Man); //true
什么是面向对象
面向对象仅仅是一个概念或者编程思想
通过一种叫做原型的方式来实现面向对象编程
调用构造函数的4个步骤
创建一个新对象
将构造函数的作用域赋给新对象(this)
执行构造函数中的代码
返回新对象
常见的内置对象
String(字符串)对象
length属性 indexOf( )方法、replace( )方法
Date(日期)对象
get×××:获取年、月、日、时、分、秒等等
set×××:设置年、月、日、时、分、秒等等
Array(数组)对象
length属性 sort( )、concat( )、join( )方法
Boolean(逻辑)对象
true或者false
toString( )方法
Math(算数)对象
round( )、max( )、min( )方法
RegExp对象
RegExp是正则表达式的缩写
constructor属性指向Person
alert(person1.constructor==Person);
alert(person2.constructor==Person);
alert(person3.constructor==Person);
8.使用instanceof操作符检测对象类型
alert(person1 instanceof Object);
alert(person1 instanceof Person);
alert(person2 instanceof Object);
alert(person2 instanceof Person);
alert(person3 instanceof Object);
alert(person3 instanceof Person);
原型对象:是原来的对象
function Person (){
}
Person.prototype.name="小明";
Person.prototype.sex="男";
Person.prototype.age=18;
Person.prototype.hobby="看书、看电影、健身、购物等";
Person.prototype.showName=function() {
alert(this.name);
}
var person1=new Person();
person1.showName();
var person2=new Person();
person2.showName();
alert(person1.showName==person2.showName);
调用man1.getFoot( ) 经历的三个步骤
搜索实例
搜索Man.prototype
搜索Humans.prototype
对象继承
function Humans(){
this.clothing=["trousers","dress","jacket"];
} function Man(){
} //继承了
Humans Man.prototype=new Humans();
var man1=new Man();
man1.clothing.push("coat");
alert(man1.clothing);
var man2=new Man();
alert(man2.clothing);
借用函数
apply:应用某一对象的一个方法,用另一个对象替换当前对象
语法:apply([thisObj [,argArray]])
call:调用一个对象的一个方法,以另一个对象替换当前对象
语法:call([thisObj[,arg1[,arg2[, [,argN]]]]])
function Humans(name){
this.name=name;
} function Man(){
Humans.call(this,"mary"); //继承了Humans,同时还传递了参数
this.age=38; //实例属性
}
var man1=new Man();
alert(man1.name); //输出mary
alert(man1.age); //输出38
组合继承
也叫做伪经典继承 将原型链和借用构造函数的技术组合到一块,发挥二者之长的一种继承模式 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承