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 相关文章推荐
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
Mar 23 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
浅谈webpack devtool里的7种SourceMap模式
Jan 14 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
vue和小程序项目中使用iconfont的方法
May 19 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 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新手上路(十三)
2006/10/09 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
js变量提升深入理解
2016/09/16 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
python批量下载抖音视频
2019/06/17 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
django使用多个数据库的方法实例
2021/03/04 Python
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
出国留学自荐信
2013/10/25 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
西式婚礼证婚词
2014/01/12 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
教师节标语大全
2014/10/07 职场文书
捐资助学感谢信
2015/01/21 职场文书
中学图书馆工作总结
2015/08/11 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
python 实现的截屏工具
2021/05/08 Python
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript