小白有几个问题,理解的不太清除,也不好自己下结论,想请教一下各位大神,还请大神们不厌其烦的解答一下。
<script>
Bf.prototype.age = 30;
function Bf () {
this.name = 'zhang';
}
var bf = new Bf();
Gf.prototype = bf;
function Gf () {
this.height = 170;
}
var gf = new Gf();
</script>
第一个问题:
请问我想把Bf的实例化对象作为Gf的原型,那么Gf.prototype = bf;
这样写,可行吗?因为我看到廖老师的博客里面采用的是一个空对象来进行过渡一下,可是有些地方是直接采用实例化对象来赋值的。哪种的比较好。
第二个问题:
那么当BF自己构造函数里面找不到相应的属性时,往上去找,是直接找BF的原型?还是先看BF构造函数里面有没有这个属性,如果没有就去BF的原型上找吗? (测试了一下,是先看里面有没有属性,再去找原型)
第三个问题:
当我希望Gf.prototype即使用bf作为原型,又希望自己在Gf.prototype上再定义一些属性,那么我是否可以这样改?
修改之前:
Gf.prototype = bf;
修改之后
Gf.prototype = {
xiongwei : 130,
__proto__ : bf // 这样写有问题的吗
}
先谢谢各位大神们了。
能不能分三个问题问?
第一个问题:
这样写,不够,因为此时:
所以应该这样:
第二个问题:
没错,先从实例上找,找不到找原型,一直找到最后的原型;
第三个问题:
有问题,这样写:
如果撇开
constructor
不谈(因为实际上是第二个问题),这样写没有太大问题,但是__proto__
不建议使用,不够标准,如果要简写的话: