一、构造函数名称获取

每一个对象都有constructor属性
每一个对象的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名称和一些字符串处理方法相关推荐

  1. JavaScript知识汇总

    1.Java Script概述 1.1.什么是JavaScript JavaScript 是一种基于对象的脚本语言. 了解: 基于对象( Object-Based ) : 只要提供好对象就可以直接使用 ...

  2. 【JavaWeb】前置知识:CSS与JavaScript知识汇总

    本文被 系统学习JavaWeb 收录,点击订阅 写在前面  大家好,我是黄小黄!经过上一篇 从Html入门JavaWeb 的学习,想必大家对标签都有了一定的认识.本文将通过案例,讲解CSS与JavaS ...

  3. C#实现 获取指定字节长度 中英文混合字符串 的方法

    平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...

  4. 磁盘扩展和缩减知识汇总

    磁盘扩展和缩减知识汇总 新增分区,挂靠到新的目录方法 1,首先通过命令lsblk 查看增加分区的情况: [root@apptrace0011 ~]# lsblk NAME MAJ:MIN RM SIZ ...

  5. html、css、JavaScript杂乱知识汇总

    文章目录 前言 1.html中的字号大小和行高的区别 1.1对行高的初步解释 1.2进一步对行高的理解 1.3利用行高垂直居中显示 2.针对于容器空间不足导致排版出问题的情况 2.1鼠标悬浮前 2.2 ...

  6. python获取月份字符串_Python时间获取及转换知识汇总

    时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...

  7. JavaScript基础知识汇总

    一.原型/原型链/构造函数/实例/继承 js万物皆对象,用  var a={} 或   var a = new Object() 或者用构造函数的形式:  var a = new A() 创建一个对象 ...

  8. JavaScript之构造函数 Constructor

    除了创建对象,构造函数(constructor) 还做了另一件有用的事情-自动为创建的新对象设置了原型对象(prototype object) .原型对象存放于 ConstructorFunction ...

  9. Java 必看的 Spring 知识汇总

    转载自 Java 必看的 Spring 知识汇总 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...

最新文章

  1. struts2+kindeditor4.0.5的上传图片的实现
  2. python2和python3如何共存_Windows下python2和python3的共存设置
  3. Android多媒体学习五:调用Android自带的播放器播放Audio
  4. 最小栈的实现(设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。)
  5. Deep learning:十(PCA和whitening)
  6. python的cgi配置教程_Python CGI环境在不同操作系统中配置方法
  7. 浅谈如何管理测试团队
  8. 组播协议——IGMP v2报文头介绍
  9. html div英文自动换行,div 实现长英文字母自动换行CSS
  10. fd 句柄_FD_CLOEXEC用法及原因-文件句柄
  11. 2008年全国计算机软考程序员考试大纲
  12. C# Ftp创建文件夹
  13. 【程序源代码】小电影小程序
  14. Gluster分布式文件系统
  15. python远程操控超微服务器(IPMI)、电脑开机(WOL)
  16. 利用python实现简单的人工神经网络识别手写数字
  17. 85.【Vue-细刷-01】
  18. 云服务的计算服务中的弹性云服务器(ECS)、裸金属服务器(BMS)以及镜像服务(IMS)的概念和深入理解【CloudService】
  19. iOS开发——单元测试
  20. STM32系列(HAL库)——F103C8T6通过MFRC522、RFID射频卡、门禁卡模块读取卡片ID(二)

热门文章

  1. oracle DataGuard停机和启动顺序
  2. java futuretask 源码解析_Java异步编程——深入源码分析FutureTask
  3. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法
  4. zoom怎么解除静音_如何召开一场Zoom视频会议
  5. wxpython使用多进程_wxPython 使用总结
  6. db2 查看表结构_数据库结构文档的生成利器
  7. linux基础实验报告6,Linux实验报告6参考答案.doc
  8. flutter release 版本 调试_腾讯课堂Flutter工程实践系列——接入篇
  9. promise A+ 原理
  10. 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...