laibin1320 2010-12-29 22:58
浏览 226
已采纳

javascript的继承方法的疑问

许多权威的javascript书上说“
原型链(prototype chaining)方式继承,
与对象冒充相似,子类的所有属性和方法都必须出现在 prototype 属性被赋值后,
因为在它之前赋值的所有方法都会被删除。为什么?因为 prototype 属性被替换成了新对象,
添加了新方法的原始对象将被销毁。”
但是混合方式的继承就是反例。
看了书上说的是不对的吧?

一下是我自己测试的例子,在IE8,opera10,chrome10下都通过了。
[code="java"]

function ClassA() { } ClassA.prototype.color = "blue"; ClassA.prototype.sayColor = function () { alert(this.color); }; function ClassB() { this.name = 'this_name'; this.sayName = function () { alert(this.name); }; } ClassB.prototype = new ClassA(); //ClassB.prototype.name = ""; //ClassB.prototype.sayName = function () { //alert(this.name); //}; var objA = new ClassA(); var objB = new ClassB(); objA.color = "blue"; objB.color = "red"; //objB.name = "John"; objA.sayColor();//this_name objB.sayColor(); objB.sayName();

[/code]

  • 写回答

1条回答 默认 最新

  • cyrilluce 2010-12-30 16:55
    关注

    书上说的是给prototype赋值,即:

    F.prototype = {}

    这种操作是不影响已经创建出来的对象实例的

    而如果是修改当前prototype对象的属性,就会有影响,因为它们是引用的同一对象:

    F.prototype.a = xxx

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘