javascript - js 中 prototype 继承问题
伊谢尔伦
伊谢尔伦 2017-04-10 17:24:18
[JavaScript讨论组]
function pp(json) {
  this.x = (json.x != null) ? json.x : '未知';
  this.xx = (json.xx != null) ? json.xx : this.x / 2;
}

function zz(x){
  this.x = x;
}

zz.prototype = new pp({});

然后

var zz = new zz(50);
alert(zz.x + '---' + zz.xx);

alert 显示的数据是 500 ,怎样才能简便的实时更新继承 ppxx 的值?我想要的是 25

求解惑


那有没有其他好的方法满足我的继承呢?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
迷茫

我左看右看怎么看都觉得这个例子是写错的。倒推回去怎么想都不可能得到你想要的答案。

pp中的this.x先被改了,然后this.xx要变为你希望是50的一半,问题是this.xx要得出25,除非有json.x=50才有可能,因为不论你this.x是多少,最后决定this.xx多少的是json.x而不是this.x

this.x = (json.x!=null) ? json.x : '未知';
this.xx = (json.xx!=null) ? json.xx : this.x/2;

下面这一行等于让json必定是空对象,所以json.x也没了,不存在了。到pp中this.x变为未知this.xx怎么还有可能是50的一半,是'未知'/2(相当于NaN)。再用更多的技巧都不可能让this.xx有25这个值。当然直接指定25是另一回事了。

zz.prototype = new pp({});

所以,要不要再确定一下到底想作什么应用,这题我答不出来。

迷茫

alert(zz.x+'---'+zz.xx);

当输出 zz.x 时实例中有这个属性,所以输出50,当输出 zz.xx 时实例中没有这个属性,所以就到原型链中去找,当找到 zz.prototype 时,其中有 xx 这个属性,因为这个属性的值用到 this.x,但是 当前函数中this.x 是 NaN,所以结果就是这样

大家讲道理

实时更改你直接这样不就好了嘛...


function pp(json){
    this.x = (json.x!=null) ? json.x : '未知';
    this.xx = (json.xx!=null) ? json.xx : this.x/2;
}
function zz(x){
    this.x= x;
}
zz.prototype = new pp({});

var zz= new zz(50);
zz.__proto__.xx = 25;
alert(zz.x+'---'+zz.xx);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号