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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(2)
Dec 23 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
Javascript动画效果(2)
Oct 11 Javascript
微信小程序 本地存储及登录页面处理实例详解
Jan 11 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
微信小程序实现吸顶特效
Jan 08 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
Mar 01 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.MVC的模板标签系统(五)
2006/09/05 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
js 走马灯简单实例
2013/11/21 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
Python备份Mysql脚本
2008/08/11 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
flask-restful使用总结
2018/12/04 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
想学画画?python满足你!
2020/12/24 Python
印度网上药店:1mg
2017/10/13 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
《与象共舞》教学反思
2014/02/24 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
给客户的感谢信
2015/01/21 职场文书
区域经理岗位职责
2015/02/02 职场文书
小学端午节活动总结
2015/02/11 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
Python Pandas解析读写 CSV 文件
2022/04/11 Python