• javascript原型prototype(2)


      每个对象都连接到一个原型对象,并且他可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype这个Javascript中标准的对象.

      当你创建一个新对象时,他可以选择某个对象作为它的原型。

    View Code
    function A(name){
    this.name=name;
    }
    function B(name,sex){
    this.name=name;
    this.sex=sex;
    }
    function C(name,sex,hobby){
    this.name=name;
    this.sex=sex;
    this.hobby=hobby;
    }
    A.prototype.say=function(){
    alert(this.name);
    }
    B.prototype.show=function(){
    alert(this.name+" : "+this.sex);
    }
    C.prototype.hello=function(){
    alert(this.name+" : "+this.sex+" : "+this.hobby);
    }
    B.prototype=new A();
    /*
    原型连接必须定义在产生对象之前,才能生效,否则默认的原型连接是Function.prototype
    会覆盖之前设置的原型连接所以alert(typeof b.say)返回underfiend
    */
    B.prototype=new C();
    var a=new A("小张");
    var b=new B("小明","");
    var c=new C("小李子","","打酱油");

    b.hello();
    alert(typeof b.say);


      读取和写入继承的属性

      每个类都有一个带有一组属性的原型对象。但是,一个类有很多的潜在的实例,每个实例都有继承这些原型属性.由于一个原型对象可以被很多对象继承,Javascript必须在读取和写入属性值的时候,执行一种基本的不对称.当读取对象O的属性p的时候,Javascript首先检查是否有一个名为p的对象.如果没有,它接下来检查O的原型对象是否有一个名为p的属性.这是的基于原型的继承能够奏效.

      当写入一个属性的值的时候,Javascript不会使用原型对象.要探究其原因,可以考虑如果它这么做的话会发生什么.假设要设置属性o.p的值,而对象o没有一个名为p的属性.进一步假设Javascript继续前进并查到属性p在o 的原型对象中,并且允许设置该原型的属性.现在,已近改变整个一类对象的p的值,而这并非本意.因此,属性继承只有在读取属性值的时候发生,而当写入属性值的时候不会发生.如果设置了一个对象o的p属性,而p属性是o从它的原型继承而来的, 那么,所发生的只不过是直接在o中创建了一个新的p属性.  既然o有了自己的名为p的属性,他不再从自己的原型中继承p的值.当读取p的值的时候,javascipt首先查看o的属性,既然他发现p定义在o中,它就不需要查找原型对象,也就不会找到定义在原型中p属性的值.我们有时候说,o的属性"遮盖" 或 "隐藏" 了原型对象中的属性p. 

     

  • 相关阅读:
    不运用正则排除出现的特定数的数字
    重绘 贝赛尔曲线特效
    缓动类gs.TweenLite示例
    画方格(二维数组)
    递归函数
    鼠标经过延时出现Hint
    鼠标控制元件移动带缓动 鼠标点击发射子弹
    A碰到B之后持续加速度的时间问题
    播放完成之后移除动画
    hdu 1032 The 3n + 1 problem (数学)
  • 原文地址:https://www.cnblogs.com/unbreakable/p/2437247.html
Copyright © 2020-2023  润新知