`
hcx_2008
  • 浏览: 121150 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

javascriptのfunction之谜

    博客分类:
  • J2EE
阅读更多
详解new function(){}和function(){}()
类别:JavaScript , 来自: 怿飞’s Blog , 难度:4级 , 时间:2008-03-03 22:53, 浏览次数: 72
摘要: javascript中new function(){}和function(){}()的用法详解。
情景一:

无格式查看复制到剪贴板打印代码?
var yx01 = new function() {return "圆心"}; 
alert(yx01); 
我们运行情景一代码,将返回显示“[object object] ”,此时该代码等价于:

无格式查看复制到剪贴板打印代码?
function 匿名类(){ 
return "圆心"; 

var yx01 = new 匿名类(); 
alert(yx01); 
我们对情景一的代码进行下面改造:

无格式查看复制到剪贴板打印代码?
var yx01 = new function() {return new String("圆心")}; 
alert(yx01); 
我们运行,将会发现返回的是“圆心”,这是为什么呢?

只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实为 return 原始类型 undefined),那么就返回 new 创建的匿名对象。

由于 new String 会构造一个对象,而不是一个 string 直接量,且new String(x) 如果带参数,那么alert它的时候就会返回 x。所以 yx01 将返回 new String(”圆心”) 这个对象,而 alert yx01 则显示 “圆心”。

情景二:

无格式查看复制到剪贴板打印代码?
var yx02 = function() {return "圆心"}(); 
alert(yx02); 
我们运行情景二代码,将返回显示“圆心”,此时该代码等价于:

无格式查看复制到剪贴板打印代码?
var 匿名函数 = function() {return "圆心"}; 
yx02 = 匿名函数(); 
alert(yx02); 
很明显,yx02 返回的是匿名函数的执行结果值,即 yx02 为:“圆心”。



function,new function,new Function对比
[日期:2007-12-20] 来源:食鸟轩  作者: [字体:大 中 小]

  函数是JavaScript中很重要的一个语言元素,提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系。

使用方法一:

var foo01 = function() //or fun01 = function()
{
     var temp = 100;
     this.temp = 200;
     return temp + this.temp;
}

alert(typeof(foo01));
alert(foo01());

   
运行结果:
function
300  
  最普通的function使用方式,定一个JavaScript函数。两种写法表现出来的运行效果完全相同,唯一的却别是后一种写法有较高的初始化优先级。在大扩号内的变量作用域中,this指代foo01的所有者,即window对象。


使用方法二:

var foo02 = new function()
{
     var temp = 100;
     this.temp = 200;
     return temp + this.temp;
}

alert(typeof(foo02));
alert(foo02.constructor());

运行结果: 
object
300  
  这是一个比较puzzle的function的使用方式,好像是定一个函数。但是实际上这是定一个JavaScript中的用户自定义对象,不过这里是个匿名类。这个用法和函数本身的使用基本没有任何关系,在大扩号中会构建一个变量作用域,this指代这个作用域本身。


使用方法三:  

var foo3 = new Function(’var temp = 100; this.temp = 200; return temp + this.temp;’);
alert(typeof(foo3));
alert(foo3());
  
运行结果:  
function
300  
  使用系统内置函数对象来构建一个函数,这和方法一中的第一种方式在效果和初始化优先级上都完全相同,就是函数体以字符串形式给出。


使用方法四:

var foo4 = Function(’var temp = 100; this.temp = 200; return temp + this.temp;’);

alert(typeof(foo4));
alert(foo4());

运行结果:

function
300 
   
  这个方式是不常使用的,效果和方法三一样,不过不清楚不用new来生成有没有什么副作用,这也体现了JavaScript一个最大的特性:灵活!能省就省。
分享到:
评论

相关推荐

    javascript Object与Function使用.docx

    ### JavaScript中的Object与Function #### 一、引言 随着JavaScript的发展与标准化,这门语言已经成为Web开发领域不可或缺的一部分。然而,在深入学习JavaScript的过程中,不少开发者对于语言内部的一些概念仍感...

    Javascript使用function创建类的两种方法(推荐)

    JavaScript中,函数(function)是创建类或对象的一种方式。传统上,我们可以使用构造函数来创建类,也可以使用现代的ES6语法使用class关键字创建类。然而,在ES6之前,开发者们多采用函数来模拟类的行为。本文将...

    深入理解JavaScript系列

    深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP 深入理解...

    深入理解JavaScript系列(.chm)

    深入理解JavaScript系列(6):S O L I D五大原则之单一职责SRP 深入理解JavaScript系列(7):S O L I D五大原则之开闭原则OCP 深入理解JavaScript系列(8):S O L I D五大原则之里氏替换原则LSP 深入理解...

    javascript中的Function.prototye.bind

    函数绑定(Function binding)很有可能是你在开始使用JavaScript时最少关注的一点,但是当你意识到你需要一个解决方案来解决如何在另一个函数中保持this上下文的时候,你真正需要的其实就是 Function.prototype.bind()...

    Javascript面向对象编程

    JavaScript使用`function`关键字来定义类。例如: ```javascript function Student(name, age) { this.name = name; this.age = age; } ``` 在这个例子中,`Student`可以被视为一个类,用于创建特定类型的对象。...

    常用javascript案例大全

    JavaScript 技巧大全 JavaScript 是一种广泛应用于 Web 开发中的脚本语言,下面是常用的 JavaScript 案例大全,包括原生 JavaScript 实现字符串长度截取、获取域名主机、清除空格、替换全部、转义 HTML 标签、还原 ...

    JavaScript-JavaScript语法集锦

    ### JavaScript 语法集锦知识点详解 #### 一、概述 JavaScript 是一种广泛应用于网页开发的脚本语言,它能够使网页具有动态交互功能。本文档将详细介绍一系列常用的 JavaScript 语法和方法,帮助开发者更好地理解和...

    javascript高级编程JavaScript.pdf

    JavaScript,作为一种广泛应用于Web开发的脚本语言,其在实际应用中常常会遇到命名冲突的问题。特别是在大型项目中,随着代码量的增加,不同模块之间的函数或变量名称可能相同,导致错误。为了解决这个问题,开发者...

    JavaScript 实现基础 ArrayList 功能

    在JavaScript中,ArrayList是一种常见的数据结构,它模拟了Java中的ArrayList功能,允许程序员进行动态数组操作。虽然JavaScript原生不支持ArrayList,但我们可以利用数组(Array)对象来实现类似的功能。下面将详细...

    JAVASCRIPT 面向对象编程精要

    ### JavaScript面向对象...JavaScript的独特之处在于它的灵活性和动态性,这使得它成为了一种非常强大的工具,适用于各种不同的应用场景。随着ES6及更高版本标准的引入,JavaScript的面向对象能力得到了进一步增强。

    javascript试题(附答案)

    JavaScript通过事件监听器来响应用户或浏览器的事件,如`element.addEventListener('click', function() { ... })`。 九、AJAX 异步JavaScript和XML(AJAX)允许在不刷新整个页面的情况下更新部分网页内容。`...

    异步函数同步_Make_an_asynchronous_function_synchronous_javascript

    在JavaScript编程中,异步处理是一项核心特性,它允许代码在等待I/O操作(如文件读写、网络请求)时不会阻塞程序的执行。然而,有时开发者可能需要将异步函数转换为同步形式,以便在特定场景下更容易控制流程。本文...

    Professional JavaScript for Web Developers英文版

    partial function application, and dynamic functionsoffline detection and storing data on the client machinetechniques for JavaScript in an enterprise environment for better maintainability ...

    javaScript

    ### JavaScript所能实现屏蔽功能总汇 #### 一、概述 JavaScript是一种广泛应用于网页开发中的脚本语言,它能够实现丰富的动态效果与交互性。在实际应用中,除了增强用户体验外,JavaScript还可以用来实现某些屏蔽...

    asp.net JavaScript插件 JavaScript Function Outliner

    综上所述,***开发人员使用JavaScript Function Outliner插件可以有效地管理JavaScript代码,特别是对于内嵌JavaScript代码的管理和压缩处理,这不仅有助于提高开发效率,也能够改善最终用户的网页加载体验。...

    JavaScript引用类型Function实例详解

    在这篇文章中,我们将深入探讨`Function`引用类型,它是JavaScript中的一个重要概念。 **Function类型** 在JavaScript中,函数是第一类对象,这意味着它们可以像其他任何值(如数字或字符串)一样被赋值给变量、...

    Javascript中神奇的this

    JavaScript中的`this`关键字是一个非常重要的概念,它与许多其他编程语言中的行为不同,因此常常让开发者感到困惑。本文将详细解析`this`在JavaScript中的工作原理及其绑定规则。 1. `this`并不总是指向函数自身 ...

Global site tag (gtag.js) - Google Analytics