美文网首页程序员
原型的动态性

原型的动态性

作者: 祝我好运zz | 来源:发表于2018-04-17 09:55 被阅读0次

原型的动态性

对原型对象所做的任何修改都能立即从实例上反映出来——即使是先创建了实例后修改原型也照样如此。

function Person(){  
}  
Person.prototype={  
    name:"Nicholas",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
  
     var friend=new Person();  
    //原型的动态性  
    Person.prototype.sayHi=function(){  
      alert("hi");  
    }  
    friend.sayHi();//"hi" 

如代码所示,即使是在实例之后修改原型,friends仍然可以访问到该属性。实例与原型之间的连接只不过是一个指针,而非一个副本。尽管可以随时为原型添加属性和方法,但如果重写原型,那么情况会有所不同。重写原型对象切断了现有原型与任何之前已经存在的对象实例的联系;它们引用的仍然是最初的原型。

function Person(){  
}  
 var friend=new Person();  
 Person.prototype={  
    name:"Greg",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
friend.sayName();//error 

此时返回错误,因为此时原来的原型里面没有sayName属性。同理,下面的例子讲返回“Nicholas”。

 function Person(){  
}  
Person.prototype={  
    name:"Nicholas",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
 var friend=new Person();  
   
 Person.prototype={  
    name:"Greg",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
  
friend.sayName();//Nicholas

小结:可以修改原型属性和方法,无论是在对象实例的前后。但不可以重写原型,此时对象实例仍然指针指向原来的原型,即创建的原型一定要在对象实例之前才会起作用。如果创建的两个原型都在对象实例之前,后面的一个会起作用。

 function Person(){  
}  
  
      Person.prototype={  
    name:"Nicholas",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
  
Person.prototype={  
    name:"Greg",  
    age:29,  
    job:"Software Engineer",  
    sayName:function(){  
        alert(this.name);  
    }  
};  
 var friend=new Person();  
   
friend.sayName();//Greg

相关文章

  • 原型的动态性

    原型的动态性 对原型对象所做的任何修改都能立即从实例上反映出来——即使是先创建了实例后修改原型也照样如此。 如代码...

  • 原型的动态性

    使用构造函数创建实例对象后,如果使用对象字面量对原型赋值将会改变原型地址,而实例上的————proto————依旧...

  • 高程 原型(笔记)

    1、原型的动态性 重新原型后切断了 现有原型与任何之前实例对象之间的关系;它引用的还是之前的原型 function...

  • web2

    js是面向对象的语言 是因为js的高度动态性的对象系统 面对对象变成:基于类 和 基于原型 js属于基于原型 性能...

  • js创建对象

    ->动态原型模式 ->混合的构造函数,原型方式(推荐)

  • js 主流创建类操作

    JS 创建类:混合的构造函数/原型方式 动态原型创建 新的Class - 类创建

  • Axure8.0教程:动态面板多级联动

    动态面板在Axure原型设计中,可以说是应用最广泛的了。本次课程我们学习用动态面板制作多级联动效果。 原型预览地址...

  • 产品技能:画好交互流程图的4个技巧

    相信不少人都看过网上各种酷炫的动态交互原型,笔者也是很欣赏的,以前也学着用flash和AE做过类似的高逼格动态原型...

  • 关于JavaScript创建对象的多种方式

    JavaScript创建对象的方法 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式...

  • AXURE-动态面板练习

    什么是动态面板? 动态面板是Axure中使用频率最高的元件之一,动态面板专门用于设计原型中的动态功能,它可以包含一...

网友评论

    本文标题:原型的动态性

    本文链接:https://www.haomeiwen.com/subject/lwhukftx.html