SaneFuture
2015-06-18 10:12
采纳率: 100%
浏览 1.6k

JavaScript 面向对象的问题

笔试的时候遇到这个题

  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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • zhanshaofu 2015-06-18 11:22
    已采纳

    补充上条,回答,this.value其实是原型变量,在classA函数内部定义为classA.prototype.value; 与 var value是两个不同的变量。

    点赞 评论
  • lhl_lqc 2015-06-18 10:28

    第一个和第二个4其实都是输出的var value=4这个值,而第三个classA.value输出的是this.value的值,而这个值已经被setValue设置为1了,this.value和var value=4这个value没有任何关系,只是一个声明而已。

    点赞 评论
  • SaneFuture 2015-06-18 12:45

    谢谢各位的回答:现在总结如下,var value和this.value不是一个变量,而this.value和classA.value和ClassA.prototype.value是同一个变量。

    点赞 评论
  • vuturn 2015-06-21 02:20

    this.value 是实例属性 每个实例独有且不相同,var value 其实就是局部变量 实例通过属性访问器.访问不了 它不是原型属性ClassA.prototype.value 是原型属性 所有的实例都共享该属性 可以通过属性访问器.访问 所以以上的说法不准确

    点赞 评论
  • vuturn 2015-06-22 01:08

    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

    
    
    点赞 评论

相关推荐 更多相似问题