1、打开编辑工具editplus,点击editplus菜单栏上的【File】-->New -->HTML page。
2、新建好html页面后,editplus自动帮助我们生成了框架,先把title修改下,然后保存。
3、在body区域里添加了子,父,祖父三级div,代码如下。
4、演示代码写好后,打开浏览器,在浏览器上运行看看效果。
5、下面在head区域里添加实现js获取最高父级的代码,代码具体如下,这样利用了while循环来判断的。
6、实现好后,保存代码,此时再到浏览器上刷新访问,看下,此时弹出对话框告诉最后父级是zufu。
类式继承就像java的继承一样,思想也比较简单:在子类型构造函数的内部调用超类型构造函数。原型式继承是借助已有的对象创建新的对象,将子类的原型指向父类,就相当于加入了父类这条原型链
而你的 下面这段代码不是严格意义上的类式继承,按照Nicholas C.Zakas的说法,这个应该叫做组合式继承。它调用了两次parent2()。第一次是 child2.prototype=new parent2('param') child2就会得到两个属性param,getParam(),他们都是parent2的属性,但是他们在child2的原型中。第二次是parent2.call(this,cparam) 这次又在新对象上创建了实例属性param,getParam()。于是,这两个属性就屏蔽了原型中的两个同名属性。这有什么好处呢,就是你在构建一个child3时也继承parent2()的属性,还可以定义自己的属性。与此同时他长的就和他兄弟不同了,但又有一样的“血统(使用父类的方法)”。
纯手打,欢迎继续讨论
1、 为了效率。
方法一,每次 new A 的时候都需要执行一次 this.b = ...
方法二, new A 的效率比方法一略高
2、 方便继承
例如我如果有一个构造函数 function B,我希望这个构造函数建立的对象也能够具备 A 中的方法。这时候方法二就可以很友好的扩展,下面是示例代码:
// 父类function A(){}
// 给父类中添加方法
A.pototype.showMe = function(){ alert('hello world') }
// 子类
function B(){}
// 子类继承父类的方法
B.prototype = new A
/** 下面是测试 */
// 构造对象
var b = new B
// 测试继承的情况
b.showMe() // 会弹出 “hello world”
总之, prototype 是为了方便扩展和继承而设置的语言特性。当然,上面的演示代码只是原理,在实际的使用中,要比上面的示例复杂一些。