问题:Function A(){ this.fn } 若 B .prototype = new A() 原型链继承了,那 会污染到 B 的 变量空间,比如 B 中 也有 fn 怎么办?
问题:Function A(){ this.fn } 若 B .prototype = new A() 原型链继承了,那 会污染到 B 的 变量空间,比如 B 中 也有 fn 怎么办?
没有污染,只是构造函数B创建的对象b具有属性fn,其原型链上也具有fn属性。
这时候访问b.fn访问的是b对象自身的fn属性,访问其父对象的fn属性可以使用b.__proto__.fn
用new方式创建B的示例(假设为b)后,调用b.fn会使用B定义的this.fn而不是A定义的this.fn。只有当B中不存在时才会继续向原型对象查找
function B() {
this.fn = function() {
console.log('B fn');
}
}
function A() {
this.fn = function() {
console.log('A fn');
}
this.fn1 = function() {
console.log('A fn1');
}
}
B.prototype = new A();
var b = new B();
b.fn();
b.fn1();
// 输出
b fn
a fn1
13 回答12.9k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
5 回答1.5k 阅读✓ 已解决
3 回答2.2k 阅读
判断该方法或值在B中是否存在,会依照其原型链逐级查找的,并返回最接近的那个。
比如
那么
B.fn
得到的是B的fn那么
B.fn
实际得到的是A的fn那么
B.fn
实际得到的是A的原型的fn那么,
B.fn
会一致追溯到null,并返回undefined当时面试的时候我还遇到这样的题目,可以参考一下