Prototype 学习 Prototype对象


Posted in Javascript onJuly 12, 2009

环境:
Prototype Version: '1.6.1_rc3'
Aptana Studio, build: 1.2.5.023247
IE7
FF2.0.0.4
Opera 10 beta

var Prototype = { 
Version: '1.6.1_rc3', 
//定义浏览器对象 
Browser: (function(){ 
var ua = navigator.userAgent; 
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; 
return { 
IE: !!window.attachEvent && !isOpera, 
Opera: isOpera, 
WebKit: ua.indexOf('AppleWebKit/') > -1, 
Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, 
MobileSafari: /Apple.*Mobile.*Safari/.test(ua) 
} 
})(), 
//定义浏览器Feature对象 
BrowserFeatures: { 
XPath: !!document.evaluate, 
SelectorsAPI: !!document.querySelector, 
ElementExtensions: (function() { 
var constructor = window.Element || window.HTMLElement; 
return !!(constructor && constructor.prototype); 
})(), 
SpecificElementExtensions: (function() { 
if (typeof window.HTMLDivElement !== 'undefined') 
return true; 
var div = document.createElement('div'); 
var form = document.createElement('form'); 
var isSupported = false; 
if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { 
isSupported = true; 
} 
div = form = null; 
return isSupported; 
})() 
}, 
ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>', 
JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, 
emptyFunction: function() { }, 
K: function(x) { return x } 
}; 
if (Prototype.Browser.MobileSafari) 
Prototype.BrowserFeatures.SpecificElementExtensions = false;

Broswer对象是通过调用匿名函数并且立即执行的方式返回的,执行匿名函数的方法有三种:
1. (function(){return 1})() //()可以强制求值,返回函数对象然后执行函数
2. (function(){return 1}()) //返回函数执行的结果
3. void function(){alert(1)}() //void 也有强制运算的用法
其中判断Opera的方法isOpera用到了window.opera,在Opera浏览器中会返回一个对象,其它浏览器返回undefined
BrowserFeatures对象主要判断浏览器的一些特性,FF支持许多的特性在IE下不支持,比如document.evalute方法就可以通过XPATH的方式操作HTML文档,但IE就不支持。
此函数详细用法如下:
var xpathResult = document.evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result);

The evaluate function takes a total of five arguments:
xpathExpression: A string containing an xpath expression to be evaluated
contextNode: A node in the document against which the Xpath expression should be evaluated
namespaceResolver: A function that takes a string containing a namespace prefix from the xpathExpression and returns a string containing the URI to which that prefix corresponds. This enables conversion between the prefixes used in the XPath expressions and the (possibly different) prefixes used in the document
resultType: A numeric constant indicating the type of result that is returned. These constants are avaliable in the global XPathResult object and are defined in the relevaant section of the XPath Spec. For most purposes it's OK to pass in XPathResult.ANY_TYPE which will cause the results of the Xpath expression to be returned as the most natural type
result:An existing XPathResult to use for the results. Passing null causes a new XPathResult to be created.
其中__proto__这个在FF下可以取得对象的prototype对象,即对象的原型。这也是javascript继承机制的基础,基于原型的继承,不像通常的C++,JAVA,C#语言的基于类的继承。还有一种metaclass的继承方式,在ruby和python中常有应用。
其中ScriptFragment定义网页中引用脚本的正则表达式
JSONFilter:还是引用prototype原文的解释更清楚他的用法——
/*String#evalJSON internally calls String#unfilterJSON and automatically removes optional security comment delimiters (defined in Prototype.JSONFilter).*/ person = '/*-secure-\n{"name": "Violet", "occupation": "character"}\n*/'.evalJSON() person.name; //-> "Violet" 
/*You should always set security comment delimiters (/*-secure-\n...*/) around sensitive JSON or JavaScript data to prevent Hijacking. (See this PDF document for more details.)*/

Prototype.K就是返回第一个参数的方法:
Prototype.K('hello world!'); // -> 'hello world!' 
Prototype.K(1.5); // -> 1.5 
Prototype.K(Prototype.K); // -> Prototype.K

说明一下JavaScript里面的静态方法和实例方法
静态方法要这样扩展:
Date.toArray=function(){}
那么toArray方法就是Date的静态方法,不能这样调用(new Date()).toArray();否则会抛出异常
要这样用:Date.toArray()
实例方法要这样扩展:
Date.prototype.toArray2=function(){}
那么toArray2方法就是Date的实例方法了,不能这样调用Date.toArray2();
要这样用:(new Date()).toArray2()
Javascript 相关文章推荐
js左侧多级菜单动态的解决方案
Feb 01 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
jquery实现pager控件示例
Apr 09 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
简单实现js浮动框
Dec 13 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
解决vue.js this.$router.push无效的问题
Sep 03 Javascript
javaScript实现游戏倒计时功能
Nov 17 Javascript
ES2020系列之空值合并运算符 '??'
Jul 22 Javascript
javascript 动态加载 css 方法总结
Jul 11 #Javascript
checkbox 复选框不能为空
Jul 11 #Javascript
javascript 页面只自动刷新一次
Jul 10 #Javascript
javascript div 遮罩层封锁整个页面
Jul 10 #Javascript
JQuery 实现的页面滚动时浮动窗口控件
Jul 10 #Javascript
javascript 读取xml,写入xml 实现代码
Jul 10 #Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 #Javascript
You might like
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
详解Python中time()方法的使用的教程
2015/05/22 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
简单介绍python封装的基本知识
2019/08/10 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
Python LMDB库的使用示例
2021/02/14 Python
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
文言文形式的学生求职信
2013/12/03 职场文书
企业车辆管理制度
2014/01/24 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
大学生简短的自我评价
2014/09/12 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
2014年财务科工作总结
2014/11/11 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫