面向对象编程
对象和类的区别:
类:在JS中类被称为对象 对象:在JS中类被称为对象的实例 1,类是一个抽象的概念,它不存在于现实中的时间/空间里,它虽然可以包含很多个体,但它本身不存在于现实世界上。 类中包括: 特征/属性,方法/功能,在JS中类就是对象。 2、对象就是将类实例化的结果。。它是一个实实在在存在的东西。 3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。 4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
2、如何构造类:
1、构造函数模式
函数模式的内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
例子:
function Cat(name,color){
this.name=name;
this.color=color;
}
2、实例化类——对象
var cat1 = new Cat("大毛","黄色");
var cat2 = new Cat("二毛","黑色");
alert(cat1.name); // 大毛
alert(cat1.color); // 黄色
3、函数的继承
继承的意思就是子元素继承父元素的方法或属性
继承的方法:
1、对象冒出法(这方法并不是真正的继承,用a instanceof b 返回true则是继承,反之则不是)
1、call 对象冒充法
例子:
<script>
function Animal(type,name,age){
this.type=type;
this.name=name;
this.age=age;
this.show=function(){
console.log("他属于:"+this.type+" "+"他的名字叫:"+this.name+" "+"今年:"+this.age)
}
}
function Dogs(type,name,age){
Animal.call(this,type,name,age);
}
var dog1 = new Dogs("犬类","哈士奇",5);
var dog2 = new Dogs("犬类","博美",6);
dog1.show();
dog2.show();
</script>
2、aplly冒充法
<script>
function Animal(type,name,age){
this.type=type;
this.name=name;
this.age=age;
this.show=function(){
console.log("他属于:"+this.type+" "+"他的名字叫:"+this.name+" "+"今年:"+this.age)
}
}
function Dogs(type,name,age){
Animal.apply(this,[type,name,age]);
}
var dog1 = new Dogs("犬类","哈士奇",5);
var dog2 = new Dogs("犬类","博美",6);
dog1.show();
dog2.show();
</script>
对象冒充法中的call和apply的区别:参数:call中的参数除了当前函数的this,其余的参数都紧随其后,用逗号隔开,而apply中也是除了this之外,其余的参数都是用数组的方式传递的
2、真正的继承
例子:
function Cats(type,name,age){
this.type=type;
this.name=name;
this.age=age;
}
Cats.prototype=new Animal();
var cat1= new Cats("猫类","加菲猫",2);
var cat2= new Cats("猫类","机器猫",3);
cat1.show();
cat2.show();
console.log(cat1 instanceof Animal);
扩展:属性和变量的区别
属性:属性是属于对象的。变量能做的属性也能做。
变量:自由的。不属于任何对象。本质上和属性相同。