原型与构造方法

          在原型模式声明中,多了两个属性,这两个属性都是创建对象时自动生成的、——proto——属性是实例指向原型对象的指针,他的作用就是指向构造函数的原型属性constructor,通过这两个属性就可以访问原型里的属性和方法了

// function Box(name,age){ //构造方法
// this.name=name; //实例属性
// this.age=age;
// this.run=function(){ //实例方法
// alert(this.name+this.age+"running....")
//
// };
//
//
// }

function Box(){

}; //这里什么都没有,如果有则为实例属性或者实例方法
Box.prototype.name="xixi"; //原型属性
Box.prototype.age=15;
Box.prototype.run=function(){ //原型方法
alert(this.name+this.age);
}
// 原型属性(方法)和实例属性(方法)的区别在于共享与否
var a=new Box();
var b=new Box();
// 如果是实例方法,不同的实例化,他们的方法地址是不一样的,是唯一的
// 如果是原型方法,那么他们的地址是共享的,大家都是一样的
// alert(a.run==b.run)//true,如果是 构造函数创造的,(返回结果为false,因为他们是引用类型的值)
//
// alert(a.prototype)//undifined 这个属性是一个对象,访问不到
// alert(a.__proto__)//object 这个属性是一个指针,指向prototype源性对象
// alert(a.constructor)//构造属性,可以获取构造函数本身
// //作用是被原型指针定位,然后获得构造函数本身
// //其实就是对象实例对应的原型对象的作用

// alert(Box.prototype.isPrototypeOf(a));
//alert(Object.prototype.isPrototypeOf(a));// Object的原型所有的对象的原型
a.name="jack"//实例属性,并没有重写原型属性
alert(a.name)//就近原则
原型模式执行流程
1:先查找构造函数实例里面的属性或方法,如果有则立刻返回
2:如果构造函数实例里面没有,则去他的原型对象里面找,如果有则返回
ps:虽然可以通过实例访问 保存在对象里面的值,但是不能通过对象实例重写原型中的值

}

</script>

</body>
</html>

2017-04-1511:54:14

时间: 2024-10-28 23:58:48

原型与构造方法的相关文章

js 原型和构造方法 内容是 从别处复制来的

Javascript来说,方法在本质上也是一种属性. 构 造方法 和构造属性一样,它是分别存储于每个实例之中的,相互之间是完全独立. 原型方法 和原型属性一样,他是存储于原型中的,每个实例中存储的实际上一 个指向原型的指针. 所有对原型方法的修改会影响到所有实例,而构造方法实际上只能通过实例来访问和修改,也只会影响到相应的实例. 先写结论:方法通常应该使用原型模式定义,并且在必要时通过原型来动态重定义,避免使用构造模式定义方法. 看看示例代码吧: 我们首先构造一个简单的类car,定义2个方法,分

js之原型与构造方法的使用

类与对象的区别 类:模子 对象:产品(成品) 例如: var arr1=new Array(12,10,11,112,111,52); Array:类 arr1:对象 只能arr1.push()而不能Array.push(); 用构造函数加属性,原型加方法 <script> function createPerson(name,qq)//构造函数 { //new创建后系统自动进行声明: //var this=new Object(); this.name=name; this.qq=qq; /

Js中找任意对象的原型方法及改造原型

Java中有运行时类型识别,js可以很方便的模仿这个特性,因为所有js对象都有一个属性constructor(构造器),表示这个对象的构造方法,原型与构造方法同名,所以可以通过这儿知道任意对象的原型名称.具体可以看代码(这里简单的封装了): function runToChain(obj){ var chainName=obj.constructor.name; return chainName; } 知道对象原型后,可以通过原型的prototype属性为原型添加可改造属性和方法,改造原型.

js类型判断及鸭式辨型

目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof console.log([1,2,3] instanceof Array); true console.log([1,2,3] instanceof Object); true 尽管构造函数是原型的唯一标识,instanceof运算符的右操作数是构造函数,instanceof实际计算过程中检测的是对

JavaScript Oriented[探究面向对象的JavaScript高级语言特性]

JavaScript Oriented 探究面向对象的JavaScript高级语言特性 Prologue . JavaScript Introduce 1.  JS Abstract JavaScript是由Netscape公司工程师Brendan Eich研发的脚本语言,经过推广和流行,兼容ECMA-262标准,至今用于描述HTML网页行为.(前端验证,检测,响应,触发,控制等动态行为) Knowledge Tree 2.     About Document 本文涉及到的概念有JavaScr

JavaScript对象的创建之基于构造方法+原型方式

为了解决原型所带来的问题,此处需要通过组合构造方法和原型来实现对象的创建,将属性在构造方法中定义,将方法在原型中定义.这种有效集合了两者的优点,是目前最为常用的一种方式. function Person(name,age,friends){ //属性在构造函数中定义 this.name = name; this.age = age; this.friends = friends; } Person.prototype = { constructor:Person, //方法在原型中定义 say:

设计模式学习笔记(十三:原型模式)

1.1概述 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象.这就是原型模式的定义. 在某些情况下,可能不希望反复使用类的构造方法创建许多对象,而是希望使用该类创建一个对象后,以该对象为原型得到该对象的若干个复制品.也就是说,将一个对象定义为原型对象,要求改原型对象提供一个方法,使该原型对象调用此方法可以复制一个和自己有完全相同状态的同类型对象,即该方法"克隆"原型对象得到一个新对象.原型对象和以它为原型"克隆"出的新对象可以分别独立地变化,也就是说,

《JAVA与模式》之原型模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例.这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新

javascript之原型(prototype)

今天是第一次写博客,写点在javascript中重要的一个概念----原型(prototype): 原型,顾名思义,就是一切事物的模板. 柏拉图在<理想国>卷10中说:"床不是有三种吗?第一种是自然中本有的,我想无妨说是神创造的,因此没有旁人能制造它:第二是木匠制造的,第三种是画家制造的." 原型就像是自然中本有的. 原型是依赖事物的,现实中现有床,而柏拉图的心中才有一个完美的床.而在javascript中,一旦构造方法,原型就会出现. 1 function Person(