javascrip之prototype

prototype:是一个object.

fn.prototype.__proto__=object.prototype

每个函数都有一个prototype对象(属性的集合),对于prototype的方法和属性都可以动态的增加,它所创建的对象会自动的继承相关的方法和属性。

另外,每个对象都有一个 construction属性,用于指定创建其的函数对象。

那么函数对象自身声明的方法和属性与prototype声明的属性与方法有什么不同呢?

1. 自身声明的方法和属性是  静态的,就是说,声明后。所声明的方法和属性不会对其创建的对象产生影响,即不会继承。

2.  而prototype可以动态的增加新的方法或者修改已有的方法,一旦父对象声明了相关的prototype属性,那么,由其创建的对象会   自动的继承 这些prototype属性,这就是动态的。

那么,函数对象自身有自己的属性,又有prototype的属性,那由其创建的对象是如何去搜索相应的属性

流程

1,先去搜索函数对象本身的属性,如果找到就立即执行

2, 如果1没有找到,就会去搜索prototype属性,找到则立即执行,否则继续向父对象的prototype属性寻找,直至找到,到达结尾的是object.prototype(这里依靠的是“利用访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链”每个对象都有一个__proto__,指向创建该对象的函数的prototype。

时间: 2024-08-25 12:20:28

javascrip之prototype的相关文章

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转化为string类型: console.log(true.toString());//"true" console.log(false.toString());//"false&quo

关于javascrip 类继承封装

下面这段代码是javascrip inherit 的一段继承的代码我倒持了一早上才搞明白其中的道理,最主要是里面有一些平时我们不怎么使用的函数和方法.比较迷惑人.现在我就针对这些代码做一些自己的注解:(当然他也有一些英文注解,但是不够清楚明白,我们也可以后期改造这个方法,让他更适合我们自己的使用) /* Simple JavaScript Inheritance * By John Resig http://ejohn.org/ * MIT Licensed. */ // Inspired by

好程序员分享JavaScrip数组去重操作实例小结

好程序员分享JavaScrip数组去重操作实例小结,这篇文章主要介绍了JavaScrip数组去重操作,结合实例形式总结分析了javascript针对数组的遍历.判断.去重等相关操作技巧,需要的朋友可以参考下. 本文实例讲述了JavaScrip数组去重操作.分享给大家供大家参考,具体如下: 内置的for-of方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script> var arr=[2,1,1,3,'','','e','e',true,'t

为什么会有jQuery、Dojo、Ext、Prototype、YUI、Zepto这么多JS包?

目前流行的JS框架很多Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fx 等.当然还有很多我都不熟悉的框架,就没有列举. 很多人会在坛子里问,到底哪个框架好呢?哪个框架更牛x呢? 哪个框架OO 更舒服呢? 个人觉得,这是一个新手很容易犯的错误逻辑. 世界上任何东西,任何工具,都没有最好的这一个说法,只有适合和不适合. 我们要根据我们项目的真实需要来选择具有相关特性的框架. 一.JQuery推荐级别:

理清javascript中prototype、__proto__、Object、Function的关系,更好地理解原型继承

本文参考了http://www.blogjava.net/heavensay/archive/2013/10/20/405440.html这篇文章,对其内容作了个简单总结,形成了几条简单的结论,让读者更容易记住prototype.__proto__.Object.Function之间的关系. 结论1:Object.prototype只是一个普通对象,它是js原型链的最顶端. (typeof Object.prototype) === object;//true Object.prototype.

设计模式(四) 原型模式(Prototype)

1.定义 原型模式属于一种创建型模式,与其他创建型模式不同,原型模式不是直接构造对象,而是通过复制一个已经存在的实例返回新的实例. 2.适用性 为何要拷贝而不直接生成?我的理解是有些时候直接构造实例花费比较大,比如在构造对象的时候需要做大量的数据库查询,这样如果构造许多类似的对象还重复地查询数据库则开销很大,很没效率.直接拷贝现有的实例,在需要情况下做一些小的修改会显得高效许多. 3.结构 Prototype: 声明一个克隆自身的接口 ConcretePrototype:实现一个克隆自身的操作

js prototype

prototype 原型. 我们每创建一个函数 都会创建一个 prototype的属性,这个属性指向了这个函数的原型对象. function A(){}  ,A.prototype  ,prototype原型只能运用在对象上,不能运用在对象的实例上 也就是说 A.prototype 是可以的 var a=new A(),  a.prototype 是不可以的. 所有对象的实例共享原型对象.什么意思如下: function A(){} A.prototype.Name="张三"://为原

函数和对象 及 prototype和__proto__

对象有  __proto__ 函数有prototype prototype 是对象, 所以有__proto__ var a1 = {a:1} var a2 = Object.create(a1); console.log(a2.prototype); //undefined console.log(a2.__proto__); //Object { a: 1 } console.log(a2.__proto__.__proto__); //Object { , 等 15 项- } console