JS技术

Javascript教程:原型的动态性_Javascript教程

字号+ 作者:H5之家 来源:H5之家 2015-09-15 17:04 我要评论( )

Javascript教程:原型的动态性,学习Javascript教程:原型的动态性,Javascript教程:原型的动态性,查看Javascript教程:原型的动态性,Javascript教程:原型的动态性原

Javascript教程:原型的动态性

原型的动态性
    由于在原型中查找值的过程是一次搜索,因此我们对原型对象所做的任何修改都能够立即从实例上反映出来——即使是西安创建了实例后修改原型也照样如此。请看下面的例子:

 

var person = new Person(); Person.prototype.sayHi = function () { alert("hi"); }; person.sayHi(); //"hi" (没有问题!)

    以上代码先创建了Person的一个实例,并将其保存在person中。然后,下一条语句在Person.prototype中添加了一个方法sayHi()。即使person实例是在添加新方法之前创建的,但它仍然可以访问这个新方法。其原因可以归结为实例与原型之间的松散连接关系。当我们调用Person.sayHi()时,首先会在实例中搜索名为sayHi的属性,在没找到的情况下,会继续搜索原型。因为实例与原型之间的连接只不过是一个指针,而非一个副本,因此就可以在原型中找到新的sayHi属性并返回保存在那里的函数;
    尽管可以随时为原型添加属性和方法,并且修改能够立即在所有对象实力中反映出来,但如果是重写整个原型对象,那么情况就不一样了。我们知道,调用构造函数时回味实例添加一个指向最初原型的_proto_指针,而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系。请记住:实例中的指针近指向原型,而不指向构造函数。看下面的例子:

function Person() {} var person = new Person(); Person.prototype = { constructor: Person, name: "Nicholas", age: 29, job: "Software engineer", sayName: function () { alert(this.name); } }; person.sayName(); //error

    在这个例子中,我们先创建了Person的一个实例,然后又重写了其原型对象。然后在调用person.sayName()时发生了错误,因为person指向的原型中不包含以改名字命名的属性;

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JavaScript入门教程(二)_javascript教程教程

    JavaScript入门教程(二)_javascript教程教程

    2015-10-10 14:25

  • JavaScript入门教程(五)_javascript教程教程

    JavaScript入门教程(五)_javascript教程教程

    2015-10-10 14:21

  • JavaScript入门教程(四)_javascript教程教程

    JavaScript入门教程(四)_javascript教程教程

    2015-10-10 14:19

  • JavaScript入门教程(三)_javascript教程教程

    JavaScript入门教程(三)_javascript教程教程

    2015-10-10 14:17

网友点评