在前面随笔中我梳理了一下BFC的知识,接下来我来理一理JS中面向对象概念,在JS中面向对象的说法其实只是一种比喻,在JS中并无类,而是一种和类性质差不多的原型函数;先举个例子:猪和牛都是属于动物这个大的类别里面的,具有一些相同的属性,比如四肢行走,睡觉,以及其它一些共同属性的;但是猪和牛有着各自不同的属性,例如牛可以挤奶,可以耕地;猪可以用来吃,用来吃,以及用来吃等等等。而原型函数的作用就是这样,先定义一个原型函数Animal来,光写没用,我来敲一下:
首先定义一个Animal原型函数:
function Animal (eat,drink,sleep){ <----------- 定义原型函数首字母要记得大写
this.eat =eat;this.drink =drink;this.sleep=function(){alert("八个小时")}
}
再定义一个牛的原型函数:
Cow.prototype=new Animal(); <------这是真实继承法,必须写
function Cow(name,eat,drink){
this.name=name;this.use=function(){alert("耕地")};this.constructor(eat,drink,sleep);<-------这是相当于在往Animal里面传参
}
再定义一个猪的原型函数:
pig.prototype = new .Animal();
function Pig(name,eat,drink){
this.name=name;this.use=function(){alert("食用")};this.constructor(eat,drink,sleep);
}
var cow=new Cow("牛","草","水"); <----------------创建一头牛
alert(cow.name+"=="+cow.eat+"=="+cow.drink);<-----可以同时调用Animal和Cow的属性
cow.sleep();
cow.use();
var pig =new Pig("猪","猪饲料","水");<----------------创建一头猪
alert(pig.name+"=="+pig.eat+"=="+pig.drink);<-----可以同时调用Animal和Pig的属性
pig.sleep();
pig.use();
console.log(Cow instanceof Animal);//判断Animal是否为Cow的原型,返回true为是,false为否;
从上面的例子可以看出,原型函数可以很好的让一些JS程序的编写变得简单,结构清晰明了。