Javascript知识汇总------获取构造函数constructor名称和一些字符串处理方法
一、构造函数名称获取
function Fn(){} var obj = new Fn(); console.log( obj.constructor === Fn ); // true 对象的constructor属性描述的就是其构造函数
下面代码所用的obj对象就是在此处创建的
1. 利用字符串截取获取构造函数名称
//利用字符串截取获取 var str = ''+obj.constructor; var str1 = str.replace('function','|');//先将function字符用 | 代替,方便截取 var startIndex = str1.indexOf('|'); //找到字符串截取开始索引 var endIndex = str1.indexOf('('); //找到字符串截取结尾索引 if( startIndex != -1 && endIndex != -1 ){var name = str1.slice( startIndex+2,endIndex );console.log(name); }
2. 利用正则表达式获取构造函数名称
//利用正则表达式获取 var reg = /function (.+)\(/; var name1 = reg.exec(str); console.log(name1);
3.利用对象name属性获取构造函数名称
//用name属性获取constructor console.log(obj.constructor.name);//ie8以下不支持
综合上面3种方法,ie8以下浏览器只能使用字符串截取已经正则表达式方法获得,而高级浏览器则3种方法都行,故需要对浏览器进行性能检测后做出兼容
//兼容所有浏览器获得构造函数名称 function getFnName(fn){/*if(typeof fn !== 'function') return;return fn.name ?fn.name:/function (.+)\(/.exec(fn + '')[1];*/ /*if(typeof fn !== 'function') return;return fn.name ||/function (.+)\(/.exec(fn + '')[1];*/return typeof fn !== 'function'?undefined:fn.name ||/function (.+)\(/.exec(fn + '')[1]; } function PersonWu(){} var obj2 = new PersonWu(); var name = getFnName(obj2.constructor); console.log(name);//PersonWu
二、字符串方法
var string = '123abc456'; var i = 3; //substring(startIndex,length) == substr 用法相同 console.log(string.substring(0,i));//123 若传两个参数表示从左边开始从索引值0开始提取前i个字符 console.log(string.substring(i)); //456 若传一个参数代表从左边开始第i个截取至最右侧 //slice(startIndex,enIndex) console.log(string.slice(0,i)) //包左不包右,-1代表右侧第一位 //string.replace(regexp/substr,replacement)
三、单例模式,确保单例(通过属性是否存在判断)不安全因为外部可以更改变量
第一种办法:
function Construct(){// 确保只有单例,确保只构造一次if( Construct.unique !== undefined ){return Construct.unique; }// 其他代码this.name = "NYF";this.age="24";Construct.unique = this; } var t1 = new Construct() ; var t2 = new Construct() ; // 那么也有的, t1 === t2 。
第二种办法:
var SingleTon = function(name){ //创建一个对象this.name = name;this.instance = null; }; SingleTon.prototype.getName = function(){alert(this.name); }; SingleTon.getInstance = function(name){if(!this.instance){this.instance = new SingleTon(name);}return this.instance; };var a = SingleTon.getInstance( 'instance1' ); var b = SinleTon.getInstance( 'instance2' );alert( a === b); //返回true
四、单例模式缓存(闭包+构造函数)
var single = (function(){var unique;function fn(){this.name = '1';}unique = new fn;return function (){return unique;}; })(); single();
五、单例代理模式
var CreateDiv = function(html){this.html = html;this.init(); };CreateDiv.prototype.init = function(){var div = document.createElement( 'div' );div.innerHTML = this.html;document.body.appendChild( div ); };var ProxySingleTonCreateDiv = (function (){var instance;return function (html){console.log(instance)if(!instance){instance = new CreateDiv( html );}return instance;} })(); var t1 = new ProxySingleTonCreateDiv('a'); var t2 = new ProxySingleTonCreateDiv('b'); console.log(t1===t2)
转载于:https://www.cnblogs.com/iwzyuan/p/8707739.html
Javascript知识汇总------获取构造函数constructor名称和一些字符串处理方法相关推荐
- JavaScript知识汇总
1.Java Script概述 1.1.什么是JavaScript JavaScript 是一种基于对象的脚本语言. 了解: 基于对象( Object-Based ) : 只要提供好对象就可以直接使用 ...
- 【JavaWeb】前置知识:CSS与JavaScript知识汇总
本文被 系统学习JavaWeb 收录,点击订阅 写在前面 大家好,我是黄小黄!经过上一篇 从Html入门JavaWeb 的学习,想必大家对标签都有了一定的认识.本文将通过案例,讲解CSS与JavaS ...
- C#实现 获取指定字节长度 中英文混合字符串 的方法
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...
- 磁盘扩展和缩减知识汇总
磁盘扩展和缩减知识汇总 新增分区,挂靠到新的目录方法 1,首先通过命令lsblk 查看增加分区的情况: [root@apptrace0011 ~]# lsblk NAME MAJ:MIN RM SIZ ...
- html、css、JavaScript杂乱知识汇总
文章目录 前言 1.html中的字号大小和行高的区别 1.1对行高的初步解释 1.2进一步对行高的理解 1.3利用行高垂直居中显示 2.针对于容器空间不足导致排版出问题的情况 2.1鼠标悬浮前 2.2 ...
- python获取月份字符串_Python时间获取及转换知识汇总
时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...
- JavaScript基础知识汇总
一.原型/原型链/构造函数/实例/继承 js万物皆对象,用 var a={} 或 var a = new Object() 或者用构造函数的形式: var a = new A() 创建一个对象 ...
- JavaScript之构造函数 Constructor
除了创建对象,构造函数(constructor) 还做了另一件有用的事情-自动为创建的新对象设置了原型对象(prototype object) .原型对象存放于 ConstructorFunction ...
- Java 必看的 Spring 知识汇总
转载自 Java 必看的 Spring 知识汇总 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...
最新文章
- struts2+kindeditor4.0.5的上传图片的实现
- python2和python3如何共存_Windows下python2和python3的共存设置
- Android多媒体学习五:调用Android自带的播放器播放Audio
- 最小栈的实现(设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。)
- Deep learning:十(PCA和whitening)
- python的cgi配置教程_Python CGI环境在不同操作系统中配置方法
- 浅谈如何管理测试团队
- 组播协议——IGMP v2报文头介绍
- html div英文自动换行,div 实现长英文字母自动换行CSS
- fd 句柄_FD_CLOEXEC用法及原因-文件句柄
- 2008年全国计算机软考程序员考试大纲
- C# Ftp创建文件夹
- 【程序源代码】小电影小程序
- Gluster分布式文件系统
- python远程操控超微服务器(IPMI)、电脑开机(WOL)
- 利用python实现简单的人工神经网络识别手写数字
- 85.【Vue-细刷-01】
- 云服务的计算服务中的弹性云服务器(ECS)、裸金属服务器(BMS)以及镜像服务(IMS)的概念和深入理解【CloudService】
- iOS开发——单元测试
- STM32系列(HAL库)——F103C8T6通过MFRC522、RFID射频卡、门禁卡模块读取卡片ID(二)
热门文章
- oracle DataGuard停机和启动顺序
- java futuretask 源码解析_Java异步编程——深入源码分析FutureTask
- 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法
- zoom怎么解除静音_如何召开一场Zoom视频会议
- wxpython使用多进程_wxPython 使用总结
- db2 查看表结构_数据库结构文档的生成利器
- linux基础实验报告6,Linux实验报告6参考答案.doc
- flutter release 版本 调试_腾讯课堂Flutter工程实践系列——接入篇
- promise A+ 原理
- 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...