0

0

javascript基本函数getAbsoluteUrl、isNative和insertRule用法实例详解

伊谢尔伦

伊谢尔伦

发布时间:2017-07-25 13:53:44

|

4165人浏览过

|

来源于php中文网

原创

getabsoluteurl

从一个字符串变量得到一个绝对 URL,并不是你想象中这么简单。对于某些 URL 构造器,如果你不提供必要的参数就会出问题(而有时候你真的不知道提供什么参数)。下面有一个优雅的技巧,只需要你传递一个字符串就能得到相应的绝对 URL。


var getAbsoluteUrl = (function() {
  var a;
 
  return function(url) {
    if(!a) a = document.createElement('a');
    a.href = url;
 
    return a.href;
  };
})();
 
// 用法
getAbsoluteUrl('/something'); 
// http://davidwalsh.name/something

a 元素的 href 处理和 url 处理看似无意义,而 return 语句返回了一个可靠的绝对 URL。

isNative

如果你想知道一个指定函数是否是原生的,或者能不能通过声明来覆盖它。下面这段便于使用的代码能给你答案:

立即学习Java免费学习笔记(深入)”;


;(function() {
 
 
// 用于处理传入参数 value 的内部 `[[Class]]` 
 var toString = Object.prototype.toString;
 
 
// 用于解析函数的反编译代码
 var fnToString = Function.prototype.toString;
 
 
// 用于检测宿主构造器 (Safari > 4 ;真的输出特定的数组)
 var reHostCtor = /^[object .+?Constructor]$/;
 
 
// 用一个标准的原生方法作为模板,编译一个正则表达式。
 
// 我们选择 'Object#toString' 因为它一般不会被污染。
 var reNative = RegExp('^' +
  
// 将 'Object#toString' 强制转为字符串 
  String(toString)
  
// 转义所有指定的正则表达式字符
  .replace(/[.*+?^${}()|[]/]/g, '$&')
  
// 用 '.*?' 替换提及的 'toString' ,以保持模板的通用性。
  
// 将 'for ...' 之类的字符替换掉,以兼容 Rhino 等环境,因为这些环境添加了额外的信息,如方法参数数量。
  .replace(/toString|(function).*?(?=()| for .+?(?=])/g, '$1.*?') + '$'
 );
 
 function isNative(value) {
  var type = typeof value;
  return type == 'function'
   
// 用 'Function#toString' (fnToString)绕过了值(value)本身的 'toString' 方法,以免被伪造所欺骗。
   ? reNative.test(fnToString.call(value))
   
// 回退到宿主对象的检查,因为某些环境(浏览器)将类型数组(typed arrays)之类的东西当作 DOM 方法,此时可能不遵循标准的原生正则表达式。
   : (value && type == 'object' && reHostCtor.test(toString.call(value))) || false;
 }
 
 
// 导出函数
 module.exports = isNative;
}());
 
// 用法
isNative(alert); 
// true
isNative(myCustomFunction); 
// false

这个函数虽不完美,但它能完成任务!

PHP高级开发技巧与范例
PHP高级开发技巧与范例

PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书

下载

insertRule

我们都知道能通过选择器(通过 document.querySelectorAll )获取一个 NodeList ,并可为每个元素设置样式,但有什么更高效的方法为选择器设置样式呢(例如你可以在样式表里完成):


var sheet = (function() {
    
// 创建