`
apple_wxs
  • 浏览: 103387 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

函数作为构造函数执行 和 作为普通函数执行的区别

阅读更多
看下面js代码
	function dwn(s)
	{
		document.write(s + "<br/>");
	}

	function Double(value)
	{
		dwn(arguments.callee);
		dwn(this.constructor);

		return parseFloat(value);
	}

	var d1 = new Double(1243.34);
	var d2 = Double(34.32);

	dwn(d1);
	dwn(d2);

运行结果
function Double(value) { dwn(arguments.callee); dwn(this.constructor); return parseFloat(value); }
function Double(value) { dwn(arguments.callee); dwn(this.constructor); return parseFloat(value); }
function Double(value) { dwn(arguments.callee); dwn(this.constructor); return parseFloat(value); }
undefined
[object Object]
34.32

说明:
this.constructor的值为 构造函数(如果被当作一个构造函数的话);如果用普通方法调用时,它的值为undefined
arguments.callee用来引用当前正在执行的函数。

所以可以通过这两个语法特性在函数里判断是哪种调用
	function Double2(value)
	{
		value = parseFloat(value);
		if (this.constructor == arguments.callee)
		{
			this.valueOf = this.toString = function()
			{
				return "构造函数:" + value;
			}
		}
		else
		{
			return "普通函数:" + value;
		}
	}

	var d3 = new Double2(1243.34);
	var d4 = Double2(34.32);

	dwn(d3);
	dwn(d4);

结果:
构造函数:1243.34
普通函数:34.32
分享到:
评论

相关推荐

    JS构造函数的执行过程

    一个函数直接调用则为普通函数调用方式,用new调用则为构造函数调用方式 function Fn(name,age){ let n = 5; this.name=name; this.age=age; } Fn(a,10); //--&gt;普通调用函数方式 let b = new Fn(b,18); // --&...

    JS中的构造函数详细解析

    从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别,是否用new运算符。上面的描述事实上有着更为精确的含义,这要把函数如果有返回值的情况分为函数的返回值是引用类型和值类型两种情况。如果一个函数...

    【JavaScript源代码】JavaScript函数this指向问题详解.docx

     一、 函数内 this 的指向 1、普通函数2、构造函数3、对象方法4、事件绑定方法5、定时器函数6、立即执行函数 1、普通函数 2、构造函数 3、对象方法 4、事件绑定方法 5、定时器函数 6、立即执行函数 二、...

    观察不同对象分别何时调用构造函数与析构函数_C/C++

    3.(1)将下例程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,使得display函数分别引用Time和Date两个类的对象的私有...

    PHP中构造函数和析构函数解析

    要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。 Example#1使用新标准的构造函数 ...

    JavaScript构造函数原理及实现流程解析

    1.当函数名为首字母大写时,这个是一个可以大概判断构造函数与普通函数的一个特点,但是不是绝对正确,因为普通函数也可以是大写字母开头 2.当我们需要调用构造函数时我们需要new &lt;构造函数&gt;,也就是产生一个实例...

    详解JS构造函数中this和return

    先看一段代码, function Foo(name,age){ this.name=name; this.age=age;...相对于普通函数,构造函数中的this是指向实例的,而普通函数调用中的this是指向windows的。 构造函数中如果加入了return的话

    C++复习资料之系列

    执行下面语句后,a和b的值分别为( b )。 int a = 5,b = 3,t; int &ra = a; int &rb = b; t = ra;ra = rb;rb = t; (a) 3和3 (b) 3和5 (c) 5和3 (d) 5和5 18. 在下列运算符中,( d )优先级最高...

    static 用法

    (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型) 特点: static局部变量的”记忆性”与生存期的”全局性” 所谓”记忆性”是指在两次函数调用时, 在...

    基于交叉耦合映象格子的单向Hash函数构造 (2009年)

    为了解决基于混沌的Hash函数构造方法中存在的问题,提高Hash函数的性能,提出了一种基于交叉耦合映象格子的单向Hash函数构造方法。该方法以交叉耦合映象格子为核心,充分利用其不同于普通时空混沌系统的优良的混乱...

    新手学习C++入门资料

    这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。 C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++...

    零起点学通C++多媒体范例教学代码

    10.3.4 构造函数和new运算符 10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 ...

    零起点学通C++学习_多媒体范例教学代码

    10.3.4 构造函数和new运算符 10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符...

    javascript学习笔记.docx

    d) 类方法:用合适的函数作为构造函数本身的一个属性。 e) 子类:把原型对象赋值为父类的一个实例,默认父类为Object的实例。同时还要将prototype.constructor赋值为子类的构造函数自己。 f) 继承:只是在查询一个...

    JS中this的指向以及call、apply的作用

    1、当函数作为普通函数调用时,this 指向全局对象 2、当函数作为对象的方法调用时,this 指向该对象 3、当函数作为构造器调用时,this 指向新创建的对象 示例一: window.name = 'myname'; function getName() {...

    php析构函数的简单使用说明

    随着面向对象编程的普遍展开,面向对象展现了其中很多有趣的问题。相信很多初学者学习php面向对象时会接触两个函数,构造函数与析构函数。构造函数似乎用的更多...我们大可将其当做一个普通的会在对象销毁或者脚本执行

    C语言程序设计标准教程

    max函数执行的 结果 (a或b)将返回给变量z。最后由主函数输出z的值。  函数调用的一般形式前面已经说过,在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。C语言中, 函数调用的一般...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    全书围绕c++语言的结构来组织,开始章节介绍编程的普通概念,接下来详细介绍C++hh的继承、多态、异常处理以及标准模板库(STL),同时还包含模式和uML的介绍。本书内容系统、全面,给出了大量代码示例、自测练习、编程...

    es5 类与es6中class的区别小结

    class类执行的话会报错,而es5中的类和普通函数并没有本质区别,执行肯定是ok的。 二、class类不存在变量提升 图2报错,说明class方式没有把类的定义提升到顶部。 三、class类无法遍历它实例原型链上的属性和方法 ...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    13.6 构造函数和析构函数 13.7 面向对象编程和继承 13.8 多态 13.9 模板 13.10 c++的异常 13.11 面向对象编程的优点 13.12 总结 13.13 练习 第14章 从c到java 14.1 输出 14.2 变量和类型 14.3 类和抽象数据类型 14.4...

Global site tag (gtag.js) - Google Analytics