栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

考虑使用'new'关键字作为'static'的Javascript函数表达式是否正确?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

考虑使用'new'关键字作为'static'的Javascript函数表达式是否正确?

不,它不是静态的,因为它仍然具有

constructor
指向您的“匿名”函数的属性。在您的示例中,您可以使用

var gameData2 = new (gameData.constructor)();

重新实例化第二个对象,因此“类”(实际上是实例)并不是真正的“静态”。基本上,您正在 泄漏 构造函数,可能 还会泄漏
与其绑定的数据。另外,确实会创建一个 无用的
原型对象(

gameData.constructor.prototype
),并将其插入的原型链中
gameData
,这不是您想要的。

相反,您可以使用

  • 一个简单的对象文字)。这意味着您没有构造函数,没有闭包范围的私有变量(无论如何都没有使用过),也没有(自定义)原型。
  • (显示)模块模式。在那里,您将具有IIFE来创建闭合范围的变量,并且可以返回任何类型的对象。
  • 一个实际的构造函数(“类”),可以稍后(在需要时)实例化,并始终产生相同的单例对象。

这是单例模式的样子:

function GameData() {    if (this.constructor.singleton)        return this.constructor.singleton;    else        this.constructor.singleton = this;    // init:    // * private vars    // * public properties    // ...}GameData.prototype.storageAvailable = function () {    if (typeof (Storage) !== "undefined") {        return true;    }    else {        return false;    }};var gameData = new GameData();var gameData2 = new GameData();gameData === gameData2 === GameData.singleton; // true

但是,原型几乎没有用,因为您只有一个实例

GameData
。继承只会变得有趣。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号