随着JavaScript的功能不止可以运行在客户端浏览器作为脚本,还是可以运行在服务器端的NodeJs,对于一个程序员,开发人员来说,不管是做前端,还是做后台,js的使用已经成为一个必备的能力,在此讨论一下js中调用一个函数使用new关键字和直接调用的区别,希望能带给新手一些帮助。也希望得到大神的指导。
一 构造器模式:
先看一下代码:
function Person(name,age){
this.name=name;
this.age=age;
}
p1=Person('tom',20);
p2=new Person('mary',21);
console.log(p1);//undefined
console.log(p2);//Person {name: "mary", age: 21}
console.log(typeof p1);//undefined
console.log(typeof p2);//object
为什么会有以上差别呢?请看一下分析:
1.使用new则是将之当做构造函数来调用,会创建一个该类的实例对象,这个对象的type是这个函数名,中间使用this.propertyName=value会对该实例对象的属性赋值,并且无论有没有return,都会返回这个对象。
2.而如果是直接调用就是简单执行里面的代码,不会创建实例对象,this指向的调用环境下的this对象,如果是在全局中直接调用,就是window,没有默认返回值。
p1就是函数Person()执行的返回值,也就是undefined. 在函数执行过程中,属性被加到全局作用域或者Person方法所属的对象上了。执行以下代码,发现属性加在了window上:
console.log(window.name);//tom
console.log(window.age);//20
而p2是Person()的实例,Person {name: "mary", age: 21}
二 工厂模式:
如果将Person函数构造为以下情况,结果会出现例外情况:
function Person(name,age){
var obj = new Object();
obj.name=name;
obj.age=age;
return obj;
}
p3=Person('jim',20);
console.log(p3);//Object {name: "jim", age: 20}
console.log(typeof p3);//object
这个就不需要加new,p3是一个Object,不是Person的实例。
Date();不加new返回当前时间,是一个字符串。加new的话,返回当前时间或者把参数格式化得到的时间,是一个Date对象。
String():不加new将参数格式化为字符串,加new则返回的是String对象。案例如下:
var str1=new String("abc");
var str2=String("abc");
console.log(str1);//String {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}
console.log(str2);//abc
console.log(typeof str1);//object
console.log(typeof str2);//string
str1.prop = 1;
console.log(str1.prop);//1
str2.prop = 1;
console.log(str2.prop);//undefined
Number类似于String。
总结以上内容有以下两点结论:
1. 直接调用函数的时候它叫“普通函数”,此时用全局对象window做上下文。
2. 用new关键字调用的时候它叫“构造函数”,此时用这个新生的对象做上下文。
限于个人能力,只能总结到这个程度,不喜勿喷!
分享到:
相关推荐
C#与JAVASCRIPT函数的相互调用 C#调用JAVASCRIPT函数的调用 JAVASCRIPT调用C#函数的调用
用javascript代码调用delphi写的函数
一个在HTML中使用Javascript的window.external调用C#内函数的示例程序。该方法可应用于网页程序开发中的网页-程序沟通,例如用C#的IHTMLWindow2.execScript替换HTML默认Javascript方法使其直接与C#传参、通讯。
JavaScript 函数调用 JavaScript 函数有 4 种调用方式。...作为一个函数调用 实例 function myFunction(a, b) { return a * b; } myFunction(10, 2); // myFunction(10, 2) 返回 20 以上函数不属于任何对
本文实例讲述了JavaScript实现同时调用多个函数的方法。分享给大家供大家参考,具体如下: 这里分析JavaScript 同时调用同一网页内的多个函数的实现方法,点击按钮后执行多次函数,比如连续弹出多次窗口。 具体代码...
JavaScript程序设计 函数的调用方式 5.2.2 函数的调用方式 概念 当函数定义完成后,要想在程序中发挥函数的作用,必须...call 和 apply 是 Function 的原型方法,它们能够将特定函数当做一个方法绑定到指定对象上,并进
Javascript中调用C++函数的代码示例。
在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用。函数有四种调用模式,分别是:函数调用形式、方法调用形式、构造器形式、以及apply形式...
该方法原理是:在网页中通过导航到一个特定的自定义网址,这个网址 就表示我们要调用的VB中的函数,然后在WebBrowser控件的BeforeNavigate2 事件处理函数中检测是否是我们自定义的网址,如果是,则根据不同的约定 ...
vbscript和javascript互相调用方法
JavaScript调用window函数.docx
具名函数的各种调用方式 在之前篇幅中已经介绍过了。这篇看看如何判断一个函数是被new调用的,还是被其它方式调用的。
QT和网页中的JavaScript函数进行相互调用的实现. 有完整的代码举例。 近期刚完成。
c#代码与javascript函数的相互调用
Android javascript 调用本地Java函数
本文介绍了在javascript函数中调用com组件的属性和方法的技术。
javascript嵌套函数和在函数内调用外部函数的区别分析.docx
javascript通过Ajax直接调用任意PHP函数多参数例程 菜农在网友指点下完成此例程,非常感谢!!! 雁塔菜农HotPower@163.com 2018.6.20于西安雁塔菜地 测试网址:http://www.hotpage.com.cn/phptest/HotFunction.html
Javascript和VC的交互方法,内部包含几个可运行工程,基于VC6.0,主要分为两部分,一部分是VC调用javascript函数,另外一部分是javascript调用VC函数
理解和使用 JavaScript 中的回调函数,,,,,,,,,,,,,,,,,,