weixin_42307533 2009-04-23 22:48
浏览 178
已采纳

各位高手,能看懂这个简短的Demo吗?

//静态属性:静态属性又称公共属性,它不属于某个类的实例,而是直接属于某个类。 function user(name) { this.Name = name ; //实例属性 } user.prototype.age = 0; //静态属性 user.prototype.birthday = function(){//静态方法 this.age++; //这里是this ,而不是 user.prototype.age++; } var XiaoWang = new user("小王");//小王 var XiaoLiu = new user("小刘");//小刘 alert(XiaoWang.age); // 0 ; alert(XiaoLiu.age); // 0 ; XiaoWang.birthday();//小王过生日了。此时小王已经 拥有了一个 自己的 age 属性, 不需要再去原型中寻找。 [b]?????这个地方实在看不懂?能否解释下? [/b] XiaoWang.age++; // 跟 birthday() 方法 同理[b]。?????这个地方实在看不懂?能否解释下?为什么XiaoWang.age++,就有了自己的age属性了 [/b] user.prototype.birthday(); alert(XiaoWang.age); // 2 ; alert(XiaoLiu.age); // 1 ; /* 首先我们解释 XiaoWang.age 为什么是2?而不是3? 在前面的过程中,XiaoWang.birthday(); 在这一步后, 其实小王已经拥有了属性age,也就是说已经为小王创建了一个跟静态属性同名的 实例属性。 所以当 user.prototype.birthday()这之后, XiaoWang.age并不会 +1 ,不管原型如何变化,都跟他无关了。 而为什么XiaoLiu.age是 1 呢 ? 因为小刘没有自己的实例属性age,所以他会到原型中寻找 名称为age的静态属性。 静态属性通过user.prototype.birthday()进行了 +1 , 所以XiaoLiu.age是 1 . */

[b]问题补充:[/b]
[color=red]
经过一番思考我认为这个问题的关键如下。
user.prototype.birthday = function(){//静态方法
this.age++; }
//这是整个问题的核心,先回归javascript最基本的概念,就是如何定义一个对象的属性,直接obj.属性名=属性值。就为obj新增了一个属性。this.age++可以理解为this.age=this.age+1;当执行this.age+1时,会从它的原型属性中找到this.age=1,而当这个值赋给this.age的时候,就向前面所说的如何定义一个对象的属性。这时this有了自己的属性age,而不再从原型中查找。不知我理解的对不对,请各们大侠拍砖。。。

[/color]

  • 写回答

5条回答 默认 最新

  • iteye_633 2009-04-25 20:00
    关注

    改成[code="js"]user.prototype.birthday = function(){
    if(!this.age){
    this.age = 0;
    }
    this.age += 1;
    } [/code]

    然后
    [code="js"]alert(XiaoWang.hasOwnProperty("age"));
    XiaoWang.birthday();
    alert(XiaoWang.hasOwnProperty("age"));[/code]

    再看不明白的话,就先去看看基础的吧,可能是this.age++;这个有点魔幻,去查查ecma-262,估计就是我写的那个意思

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码