javascript中使用new与不使用实例化对象的区别

   这篇文章主要介绍了javascript中使用new与不使用实例化对象的区别的相关资料,需要的朋友可以参考下

  我们先来看个实例

  ?

1
2
3
4
5

function Me(name,age,job){
this.name = name;
this.age = age;
this.job = job;
}

  请问这以下两种实例化对象方式有什么区别呢?

  ?

1
2

var mefun1 = new Me('fei','20','it');
var mefun2 = Me('fei','20','it');

  简单的说

  第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数

  第二种不是实例化,只是调用函数把返回值赋给变量。

  再扩展下

  JavaScript 中并没有真正的类,但JavaScript 中有构造函数和new 运算符。构造函数用来给实例对象初始化属性和值。任何JavaScript 函数都可以用做构造函数,构造函数必须使用new 运算符作为前缀来创建新的实例。

  new 运算符改变了函数的执行上下文,同时改变了return 语句的行为。实际上,使用new和构造函数很类似于传统的实现了类的语言:

  ?

1
2
3
4

// 实例化一个Me
var alice = new Me('alice', 18, 'Coder');
// 检查这个实例
assert( alice instanceof Me );

  构造函数的命名通常使用驼峰命名法,首字母大写,以此和普通的函数区分开来,这是

  一种习惯用法。

  ?

1
2

// 不要这么做!
Me('alice', 18, 'Coder'); //=> undefined

  这个函数只会返回undefined,并且执行上下文是window(全局)对象,无意间创建了3个全局变量name,age,job。调用构造函数时不要丢掉new 关键字。

  当使用new 关键字来调用构造函数时,执行上下文从全局对象(window)变成一个空的上下文,这个上下文代表了新生成的实例。因此,this 关键字指向当前创建的实例。尽管理解起来有些绕,实际上其他语言内置类机制的实现也是如此。

  默认情况下,如果你的构造函数中没有返回任何内容,就会返回this——当前的上下文。

  要不然就返回任意非原始类型的值.

  以上所述就是本文的全部内容了,希望大家能够喜欢。

时间: 2024-08-18 19:55:40

javascript中使用new与不使用实例化对象的区别的相关文章

javascript中使用new与不使用实例化对象的区别_javascript技巧

我们先来看个实例 function Me(name,age,job){ this.name = name; this.age = age; this.job = job; } 请问这以下两种实例化对象方式有什么区别呢? var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it'); 简单的说 第一种是构造函数式,即通过new运算符调用构造函数Function来创建函数 第二种不是实例化,只是调用函数把返回值赋给变量.

Javascript中prototype属性实现给内置对象添加新的方法

  本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" con

JavaScript中变量声明有var和没var的区别

 本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 1 2 3 (function(){  // ...  })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMA

javascript-在 JavaScript 中每个函数都是一个Function对象。

问题描述 在 JavaScript 中每个函数都是一个Function对象. Function 构造器会创建一个新的 Function 对象. 在 JavaScript 中每个函数都是一个Function对象. 这句话应该怎么理解? 解决方案 因为每一个函数都是function name(){},,声明一个函数就创建一个function对象 解决方案二: 不知道你问的是不是这个概念,每当你创建一个函数对象时,js引擎都会调用所有函数对象的父类,也就是Function的构造函数来创建一个函数对象,

深入理解JavaScript中的call、apply、bind方法的区别_javascript技巧

在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply 和bind这三个方法,来改变函数体内部 this 的指向,因为函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念 apply.call apply:应用某一对象的一个方法,用另一个对象替换当前对象 call:调用一个对象的一个方法,以另一个对象替换当前对象 function pers

JavaScript中三个等号和两个等号的区别(== 和 ===)浅析_javascript技巧

== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ==,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 ===,这个比较简单.下面的规则用来判断两个值是否===相等: 1.如果类型不同,就[不相等] 2.如果两个都是数值,并且是同一个值,那么[相等]:(!例外)的是,如果其中至少一个是NaN,那么[不相等].(判断一个值是否是NaN,只能用isNaN()来判断) 3.如果两个都是字符串,每个位置的字符都一样,那么[

JavaScript中变量声明有var和没var的区别示例介绍_javascript技巧

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供

Javascript中prototype属性实现给内置对象添加新的方法_javascript技巧

本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>prototype

JavaScript中使用var 关键字与不用var关键字的区别

var 关键字作用 声明作用:如声明个变量.  语法 var c = 1;  省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的.   <script type="text/javascript">   function Define() {     a = 2;   }   function Hello() {     alert(a);   } </script> 如代码所示,运行函数