havng这样的代码:
function A(){
var a=7;
this.fun = function(){
return a*2;
}
}
function B(){
var a =8;
}
很明显,为了将B原型引用到A,我们需要添加一行:
B.prototype = new A();
我在徘徊为什么制作这样的代码是无效的:
function A(){
var a=7;
this.fun = function(){
return a*2;
}
}
function B(){
var a =8;
this.prototype = new A();
}
当我们需要将原型放在B中的声明中时,我们需要通过以下方式来实现:
function B(){
var a =8;
this.__proto__ = new A();
}
并且此类代码无效:
function B(){
var a =8;
}
B.__proto__ = new A();
现在我正在失去它 - 为什么会这样?为什么我们必须在函数之外声明原型而我们无法在其中声明它,为什么它与 proto 正好相反?
答案 0 :(得分:0)
1) var A = function () {
this.x = function () {
//do something
};
};
2) var A = function () { };
A.prototype.x = function () {
//do something
};
在第一种情况下,为变量A分配一个值,该值是对函数的引用。当使用A()调用该函数时,该函数不会被调用设置,因此它默认为全局对象,而this.x实际上是window.x。结果是对右侧的函数表达式的引用被赋值给window.x。
在第二种情况下,在第一行中,变量A被赋予对函数的引用。在JavaScript中,默认情况下所有函数对象都具有prototype属性,因此没有单独的代码来创建A.prototype对象。在第二行中,为A.prototype.x分配了对函数的引用。如果它不存在,这将创建一个x属性,如果不存在则创建一个新值。因此,与第一个示例的区别在于表达式中涉及哪个对象的x属性。