【问题标题】:JAVASCRIPT function in constructor构造函数中的 JAVASCRIPT 函数
【发布时间】:2018-06-09 22:02:18
【问题描述】:

有什么区别

function Set(){
    this.a =1;
    this._v2s=function(){};
    this._v2s.next = 1000;
}

和

function Set(){
    this.a =1;
    _v2s =function(){};
    _v2s.next = 1000;
}

和

function Set(){
    this.a =1;
}

Set._v2s = function(){};
Set._v2s.next =1000;

有点困惑,因为他们的行为不一样

【问题讨论】:

  • 对于每一个,你的期望是什么,结果是什么?如果您了解基础知识,您也许可以回答自己的问题。
  • 第一个_v2s是类实例对象,第二个是全局变量和属性函数。

标签: javascript function methods constructor


【解决方案1】:

为了解释您的三个示例之间的区别,假设您使用 new 关键字调用 Set 函数,使其像构造函数一样工作:

var mySet = new Set(); 

1.第一个例子:

function Set(){
    this.a =1;
    this._v2s=function(){};
    this._v2s.next = 1000;
}

var mySet = new Set(); 

这段代码定义了什么:

  • Set:对象(原型Function.prototype)
  • mySet:对象(原型Set.prototype)有2个自己的属性:
    • a:数字(值 = 1)
    • _v2s : 一个对象(原型函数),其属性名为 next 是一个数字(值 = 1000)

2。第二个例子:

function Set(){
    this.a =1;
    _v2s =function(){};
    _v2s.next = 1000;
}

var mySet = new Set();

这段代码定义了什么:

  • Set : 对象(原型Function.prototype)
  • mySet:对象(原型Set.prototype)具有1个自己的属性:
    • a:数字(值 = 1)
  • _v2s :和以前一样,只是它现在是一个全局变量,不再是mySet 自己的属性

3.第三个例子:

function Set(){
    this.a =1;
}

Set._v2s = function(){};
Set._v2s.next =1000;

var mySet = new Set();

这段代码定义了什么:

  • Set:对象(原型Function.prototype),具有1个自己的属性:
    • _v2s :与以前相同,只是它现在是 Set 对象的自己的属性。
  • mySet:对象(原型Set.prototype)有1个自己的属性:
    • a:数字(值 = 1)

【讨论】:

    【解决方案2】:

    在您的第一个示例中,您实际上是在使用您的函数构造一个类,其中 this.a 和 this.v2 的值被应用于您的新对象。

    在第二个例子中

    _v2s =function(){};
    _v2s.next = 1000;
    

    是一个全局变量。 new Set 将设置一个全局变量 _v2s 与属性 next

    在第三个中,您将_v2 属性设置到类本身。这意味着当您构造 Set 时,_v2 将不会与您的集合一起创建。只能通过调用Set._v2访问它

    希望这不会令人困惑。

    【讨论】:

    • 它不会抛出错误:没有var,它是一个全局变量。
    • 确实如此。我必须修改我的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2019-03-10
    • 2012-06-30
    • 2021-01-08
    相关资源
    最近更新 更多