笔试的时候遇到这个题
function ClassA() {
var value=4;
this.getValue= function()
{
return value;
}
this.setValue= function(value)
{
this.value=value;
}
var classA = new ClassA();
document.write(classA.getValue());
classA.setValue(1);
document.write(classA.getValue());
document.write(classA.value);
为什么输出结果是441
补充上条,回答,this.value其实是原型变量,在classA函数内部定义为classA.prototype.value; 与 var value是两个不同的变量。
第一个和第二个4其实都是输出的var value=4这个值,而第三个classA.value输出的是this.value的值,而这个值已经被setValue设置为1了,this.value和var value=4这个value没有任何关系,只是一个声明而已。
谢谢各位的回答:现在总结如下,var value和this.value不是一个变量,而this.value和classA.value和ClassA.prototype.value是同一个变量。
this.value 是实例属性 每个实例独有且不相同,var value 其实就是局部变量 实例通过属性访问器.访问不了 它不是原型属性ClassA.prototype.value 是原型属性 所有的实例都共享该属性 可以通过属性访问器.访问 所以以上的说法不准确
var value;就是一个私有变量,没有其他任何意义。只有通过调用特权方法getValue才可以访问。
原型属性ClassA.prototype.value ,对象的实例可以访问,例如: classA.value;对象本身ClassA.value是undefined。
原型链原理:实例顺着原型链会找到对象的原型 (ClassA.prototype),因此classA.value访问的就是ClassA.prototype.value,而ClassA.value访问的就是Object.prototype.value(ClassA是Object对象的实例),因此是undefined。
function ClassA(){
var value=4;
this.getValue=function(){
return value;
}
this.setValue=function(value){
this.value=value;
}
}
ClassA.prototype.value=1;
Object.prototype.value=2;
var instance1=new ClassA();
var instance2=new ClassA();
console.log(instance1.value); //1
console.log(ClassA.value); //2