4.原型的动态性


function Person(){

 } var firend=new Person(); Person.prototype.sayHi=function(){     alert("hi"); } firend.sayHi(); // hi // 没有重写原型!!!! //虽然sayHi()方法是在firend实例化之后定义的,但是firend仍然可以访问sayHi()方法, //其原因可以归结为实例与原型之间的松散连接关系,当我调用 firend.sayHi()方法时,会在实例中搜索 sayHi属性,在没找到的情况下,会继续搜索原型,因为实例与原型之间的连接是一个指针,不是副本,因此就可以在原型中找到sayHi,并返回保存在那的函数。

function Person2(){ } var firend2=new Person2(); Person2.prototype={     constructor:Person2,     name:"summer2",     age:25,     job:"enginner2",     sayName2:function(){         alert(this.name);     } } firend2.sayName2();// 报错 : firend2.sayName2 is not a function

 // 上面的例子重写了整个原型对象,我们知道,调用构造函数时,会为实例添加一个指向最初原型的(prototype)指针, //而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系,请记住:实例中的指针紧指向原型,而不指向构造函数
时间: 2024-10-30 06:22:08

4.原型的动态性的相关文章

JS原型的动态性及实例与原型的关系

今天再读了<JS高程>的第六章,有了些深入的感悟和理解,总结分享一下. 创建对象的方式有很多,有一种是动态原型模式,最实用的是构造函数与原型组合的模式,原型的动态性在这两个模式里都有所体现,我本人的理解是:前者的“动态”是通过一些判断,看方法是否存在来决定是否对原型进行初始化,同时,在构造函数内部对原型的修改会立即体现在所有的实例中,后者的“动态”是主要是说无论是先创建实例还是先修改原型,对原型对象所做的修改都会立即反应在实例中,针对后者来个栗子(栗子1): function Person()

原型的动态性

这是对<高级3>的P156页,原型的动态性的理解 function Person(){ } var oldproto = Person.prototype; var friend = new Person(); Person.prototype = { constructor: Person, name: "Nicholas", age: 29, job: "Software Engineer", sayName: function () { alert

原型的实时局部修改与全部重写的区别(原型的动态性)

1 //代码1-原型原理: 2 function Student(){ 3 //创建了一个空的构造函数 4 } 5 6 //注意:创建了函数Student的同时Student.prototype原型对象就立即产生了 7 8 var person1 = new Student();//实例person1默认都会从Student.prototype 继承属性与方法 9 var person2 = new Student();//实例person2默认都会从Student.prototype 继承属性

理解javascript原型的动态性

function Person(){} Person.prototype.name = 'sun'; var person1 = new Person(); alert("Person最初原型:"+person1.name); //第一次重写原型 Person.prototype = { constructor : Person,   //显式声明constructor name : 'cheng', age : 18 }; alert("原型被覆盖后P1:"+pe

JS原型的动态性

由于在原型中查找成员的过程是一次搜索,所以我们对原型对象所做的任何修改都能立即从实例上反映出来(但不包括对原型对象的重写,下面会介绍到),即使是对原型的修改操作在创建实例之后.如下面的示例所示: function Wede(){}Wede.prototype.name="wede's name"; //"wede's name"//创建实例var person=new Wede();//这时候的name属性是共享原型对象上的name属性person.name; //

简单原型语法和原型动态性

一.简单原型语法 function Student(){ } Student.prototype={ name:'yjj', age:15, myName:function (){ alert(this.name); } } //简单原型写法本质上完全重写了默认的prototype对象,因此construtor属性也就变成了新对象的constructor属性,指向了object构造函数,不再指向Student函数. //通过constructor已经无法确定对象类型了 var student =

javascript原型Prototype

在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的目的. 接下来进一步介绍javaScript原型. 一.javaScript原型机制 1.函数与原型的关系 js中创建一个函数,就会自动创建一个prototype属性,这个属性指向函数的原型对象,并且原型对象会自动获得一个constructor(构造函数)属性,指向该函数. 举例:以前面的原型模式创

深入理解JavaScript中创建对象模式的演变(原型)

创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Object构造函数和对象字面量方法 工厂模式 自定义构造函数模式 原型模式 组合使用自定义构造函数模式和原型模式 动态原型模式.寄生构造函数模式.稳妥构造函数模式 第一部分:Object构造函数和对象字面量方法 我之前在博文<javascript中对象字面量的理解>中讲到过这两种方法,如何大家不熟悉,可以点进去看一看回顾一下.它们的优点是用来创建单个的对象非常方

JS 原型的 理解

1.理解原型对象 我们创建 函数时,函数有一个 prototype(原型)属性,指向一个原型对象.在默认情况下,所有原型对象都会自动获得一个 constructor(构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针. function Person(){ } 就拿前面的例子来说,Person.prototype. constructor 指向 Person.而通过这个构造函数,我们还可继续为原型对象添加其他属性和方法. Person.prototype.name =