javascript的new运算的思考

看到一篇关于javascript单例的文章 http://blog.crazycoder.cc/post/13

对javascript new运算有些思考:

情况1:

function test1(){

  return {name:‘test1‘};

};

new test1的结果:{name:‘test1‘}

情况2:

function test2(){

};

test2.prototype={name:‘test2‘};

new test2 的结果:{name:‘test2‘}

情况3:

function test3(){

return {name:‘test3-1‘};

};

test3.prototype={name:‘test3-2‘};

new test3 的结果:{name:‘test3-1‘}

情况4:

function test4(){

return ‘test4‘;

};

new test4 的结果:{}

情况5:

function test5(){

return [];

};

new test5 的结果:[];

情况6:

function test6(){

return function(){ return ‘test6‘};

};

new test6 结果:function(){ return ‘test6‘};

结论:

与java不同,javascript的new运算是有返回值的,返回值可以是对象、数组、函数,若返回值类型不符合要求,则返回原型的浅克隆,否则返回返回值对象。

疑问:

原文中

 //构造函数指针
  instance.constructor = Singleton;

这行去掉似乎也是正确的...
时间: 2024-10-06 09:14:41

javascript的new运算的思考的相关文章

【javascript】浮点数运算问题分析及解决方法

问题: 在用 js 进行小数四则运算时发现了一个重大问题,比如:0.7 * 0.8 = 0.5599999999999999 分析: 在 js 中只有一种数字类型 Number,而且在 js 中所有的数字都是以 IEEE-754 标准格式表示的.浮点数的精度问题并不是 js 特有的,因为有些小数以二进制表示位数是无穷的,比如 1.1,其程序实际上无法真正的表示 1.1,而只能做到一定程度上的准确(1.09999999999999999),这是无法避免的精度丢失. 通过 chrome 控制台,我们

javascript 大数值数据运算

javascript数字运算结果不准确: 1.浮点型数字进行运算时,基本四则运算结果都可能不准确,一般是把浮点型数据转换为整型运算,然后在还原处理. 这种情况下可以用一些常用转换方法计算,如下: 1 /** 2 * 加法运算 3 */ 4 function numAdd(num1, num2) { 5 var baseNum, baseNum1, baseNum2; 6 try { 7 baseNum1 = num1.toString().split(".")[1].length; 8

JavaScript组合继承的一点思考

今天看<JavaScript高级程序设计>一书中关于组合继承模式时,书上有这么一个Demo程序: <html> <head> </head> <body> <script> function SuperType(name){ this.name = name; } SuperType.prototype.sayName = function(){ alert(this.name); }; function SubType(name,

JavaScript 浮点数及运算精度调整总结

JavaScript 浮点数及运算精度调整总结 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的. 作者:来源:theWalker|2015-12-02 10:21 移动端 收藏 分享 [技术沙龙]AI开发者实战营-7分钟打造1个定制技能.7月22号,我们等你一起! JavaScript 只有一种数字类型 Number,而且在Jav

javascript浮点值运算舍入误差

问题 在javascript中整数和浮点数都属于Number数据类型(简单数据类型中的一种),我们经常会发现在打印1.0这样的浮点数的结果是1而非1.0,这是由于保存浮点数的内存空间是保存整数值的两倍,所以ECMAScript会不失时机地将浮点数转换为整数. 上面这种情况虽然让强迫症患者有点不舒服,但是好歹也不是什么大错,接下来这种情况就很吓人了.例如我们在计算0.1加0.2时,它的输出结果不是0.3,而是0.3000000000000004.what the fuck?!第一次遇到这种情况的童

利用JavaScript实现加减乘除运算

一.问题:利用JavaScript写一个加减乘除运算,输入两个数,判断下拉列框的运算符号,进行相应的运算 二.首先,我利用JavaScript实现简单加法运算,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="

javascript函数传参的思考

今天下午思考了一下调用函数的时候,是怎么样吧参数传给执行的函数.当值的类型不同的时候,又没有变化. 当参数的值是基本类型的时候,这个时候是按值传递的,这个肯定都是清楚的,但是当值是引用类型的时候,这个时候情况又是怎么样的啊. 当我们把一个对象当作参数的时候传递的时候,我们发现怎么运行funx函数,但是全局对象a变量也被修改了,这个时候有些迷惑.参数在传递的时候,不是通过值传递的么,为什么会修改外部环境中的对象的属性.发现这个好像是引用传递.但是,如果我们运行下面这样的函数的时候: 发现输出的结果

对于javascript的词法作用域的思考

曾经看到过这样一段有意思的程序: var a=3; function scopeTest(){ console.log(a); var a=2; console.log(a); } scopeTest(); 在控制台上打印结果为: undefined 2 对于第一次输出的undefined感觉到奇怪. 在查了一些资料后发现: javascript的运行其实要分为两个过程,第一个过程是词法分析,第二个过程是执行.在以上的这段程序中var a=3和var a=2这两个语句都可以分别看做是两部分:va

javascript中的变量类型思考

有一个小任务,要求如下: // 使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝// 被复制的对象类型会被限制为数字.字符串.布尔.日期.数组.Object对象.不会包含函数.正则对象等题目解析: 深度克隆一个对象.首先明白这里的对象有哪些类型:数字对象,字符串对象,布尔对象,日期对象,数组对象,Object对象. 其中Number,String,Boolean对象是原始对象,String,Date,Array,Object对象是合成对象数字对象的特点:http://www.w