浅谈JavaScript 继承机制的实现(3)
Sex.apply(this,[sex]);<span style="white-space:pre"> </span>//apply()方法
}
var chin1 = new Chinese("小明","Male");
这里是call()和apply()方法的介绍:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp
其实对象冒充最大的问题就是,无法通过子类找到继承的父类.
所以这并非真正意义的继承.
[javascript]
chin1 instanceof Chinese;<span style="white-space:pre"> </span>//true
chin1 instanceof Human;<span style="white-space:pre"> </span>//false
chin1 instanceof Sex;<span style="white-space:pre"> </span>//false
chin1 instanceof Chinese;<span style="white-space:pre"> </span>//true
chin1 instanceof Human;<span style="white-space:pre"> </span>//false
chin1 instanceof Sex;<span style="white-space:pre"> </span>//false
当继承的父类中有定义对应的方法时,每次定义的对象都会重新生成一个对应的方法,这样十分浪费内存,而且不便于管理.
[javascript]
function Human(){ //定义Human类
this.species = "Human";
this.fun = function() {};
}
function Sex(sex) { //定义Sex类
this.sex = sex;
}
function Chinese(name,sex){
this.name = name;
Human.call(this); //call()方法
Sex.apply(this,[sex]); //apply()方法
}
var chin1 = new Chinese("小明","Male");
var chin2 = new Chinese("小红","Female");
chin1.fun === chin2.fun; //false
function Human(){ //定义Human类
this.species = "Human";
this.fun = function() {};
}
function Sex(sex) { //定义Sex类
this.sex = sex;
}
function Chinese(name,sex){
this.name = name;
Human.call(this); //call()方法
Sex.apply(this,[sex]); //apply()方法
}
var chin1 = new Chinese("小明","Male");
var chin2 = new Chinese("小红","Female");
chin1.fun === chin2.fun; //false
因此,下面要讨论的是原型继承(prototype).
[javascript]
function Human(){ //定义Human类
this.species = "Human";
}
function Chinese(name){
this.name = name;
}
Chinese.prototype = new Human(); //原型对象指向Human类
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- JavaScript详解
- 发表评论
-
- 最新评论 更多>>