`

js的构造函数说明(严格模式)

 
阅读更多
function Fubar(foo, bar){
  'use strict';
  this._foo = foo;
  this._bar = bar;
}

Fubar()

 为了保证构造函数必须与new命令一起使用,一个解决办法是,构造函数内部使用严格模式,即第一行加上use strict。这样的话,一旦忘了使用new命令,直接调用构造函数就会报错。

 

上面代码的Fubar为构造函数,use strict命令保证了该函数在严格模式下运行。由于严格模式中,函数内部的this不能指向全局对象,默认等于undefined,导致不加new调用会报错(JavaScript 不允许对undefined添加属性)。

另一个解决办法,构造函数内部判断是否使用new命令,如果发现没有使用,则直接返回一个实例对象

 

function Fubar(foo, bar) {
  if (!(this instanceof Fubar)) {
    return new Fubar(foo, bar);
  }

  this._foo = foo;
  this._bar = bar;
}

Fubar(1, 2)._foo // 1
(new Fubar(1, 2))._foo // 1

 上面代码中的构造函数,不管加不加new命令,都会得到同样的结果。

分享到:
评论

相关推荐

    JavaScript构造函数详解

    总结来说,JavaScript构造函数是用于初始化对象的一种特殊函数。理解构造函数、原型链以及this关键字在构造函数中的行为对于掌握JavaScript编程至关重要。通过构造函数与原型对象之间的相互作用,开发者能够创建复杂...

    JS 四种函数调用模式

    在 JS 中,有四种主要的函数调用模式,分别是:普通函数调用、方法调用、构造函数调用和apply/call调用。下面我们将详细探讨这些调用模式。 1. **普通函数调用**: 这是最常见的情况,函数作为一个独立的实体被执行...

    JavaScript中的普通函数与构造函数比较

    JavaScript中的普通函数与构造函数是两种不同类型的函数,它们在定义方式、调用方式及作用上都有所区别。普通函数通常是指不依赖于new关键字调用的函数,而构造函数则特指设计用来创建和初始化新对象的函数。接下来...

    javascript 构造函数强制调用经验总结

    在JavaScript编程中,构造函数是一种特殊的函数,用于创建和初始化对象。构造函数通常使用new操作符来调用,...同时,理解JavaScript的执行上下文、作用域链以及this的指向也是深入掌握JavaScript构造函数所必需的。

    JavaScript中函数对象调用模式总结

    2. **方法调用模式**:当函数作为对象的一个属性被调用时,如 `obj.func()`,`this` 关键字会指向调用该函数的对象(在非严格模式下)。这种方法调用常用于对象的方法定义。 3. **构造器调用模式**:通过 `new` ...

    Javascript中构造函数要注意的一些坑

    总结一下,理解JavaScript构造函数的工作原理至关重要,包括`new`关键字的作用、`this`的绑定以及严格模式的影响。在编写构造函数时,应始终确保正确使用`new`,并且谨慎处理返回值,尤其是在严格模式下。此外,使用...

    12-JS严格模式.md

    要在JavaScript代码中开启严格模式,你需要在代码或函数的起始处加入`'use strict';`指令。这可以应用于整个脚本或单个函数中。 ```javascript // 开启全局严格模式 'use strict'; var n = 100; // 这行代码会抛出...

    详解JS构造函数中this和return

    JS(JavaScript)是目前广泛应用于前端开发的一种编程语言,其中构造函数是其面向对象编程的一个重要概念。构造函数允许我们创建具有相同属性和方法的多个对象实例,而this关键字和return语句在构造函数中的使用则...

    js判断浏览器是否支持严格模式的方法

    然而,在严格模式下,未使用`new`操作符调用构造函数时,`this`会被设置为`undefined`,而不是全局对象。这一差异可以用来检测浏览器是否支持严格模式。例如: ```javascript var hasStrictMode = (function() { ...

    JavaScript高级第03天笔记1

    JavaScript 高级笔记 - 函数的定义和调用、this 指向和改变、严格模式 JavaScript 中的函数定义和调用是编程语言的基础。函数可以定义多种方式,包括函数声明、函数表达式和 new Function()。函数的调用方式也多种...

    JavaScript 严格模式(use strict)用法实例分析

    在非严格模式下,如果在一个非构造函数或非方法中使用 `this`,它通常会指向全局对象(在浏览器环境中通常是 `window`)。但在严格模式下,这样做会抛出错误。 11. **禁止使用保留字作为变量名**: `eval` 和 `...

    JavaScript严格模式详解

    JavaScript的严格模式(strict mode)是对JavaScript编程的一种增强模式,旨在消除语言中的一些不安全、不合理和不严谨的特性,从而提升代码质量和安全性。在严格模式下,如果开发者违反了某些特定规则,JavaScript...

    浅谈jQuery构造函数分析

    虽然JavaScript本身并非一种严格的面向对象语言,但它支持多种面向对象的编程模式。jQuery的设计巧妙地结合了这些模式,尤其是构造函数和原型链的概念。 在jQuery的实现中,我们可以看到它使用了一个自调用的匿名...

    JavaScript 基本构造图.zip

    这个"JavaScript基本构造图.zip"文件包含了对JavaScript基础知识的系统整理,涵盖了多个核心概念,包括BOM(浏览器对象模型)、DOM(文档对象模型)、变量、函数、流程控制、数据类型、数组、运算符、正则表达式以及...

    js中的面向对象入门

    在JavaScript编程中,面向对象编程(OOP)是一种重要的编程范式,它提供了一种...通过使用单例模式、工厂模式、构造函数模式和原型模式等不同的设计模式,开发者可以更好地组织代码结构,提高代码的可读性和可维护性。

    JavaScript严格模式下关于this的几种指向详解

    这意味着在严格模式下,构造函数中的`this`仍然可以用于初始化新对象的属性。 ```javascript "use strict"; function Constructor() { this.value = 'constructor'; } let instance = new Constructor(); ...

Global site tag (gtag.js) - Google Analytics