构造函数中的JAVASCRIPT函数

问题描述 投票:-4回答:2

有什么区别

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;

有点困惑,因为他们彼此之间的行为并不相同

javascript function methods constructor
2个回答
1
投票

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

在第二个例子中

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

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

在第三个中,您将_v2属性设置为类本身。这意味着当你构建你的Set时,_v2不会用你的套装创建。它只能通过调用Set._v2来访问

希望不要混淆。


0
投票

为了解释你的三个例子之间的差异,让我们假设你使用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:具有2个自有属性的对象(原型Set.prototype): a:数字(值= 1) _v2s:一个对象(原型函数),有一个名为next的自有属性,它是一个数字(值= 1000)

2.第二个例子:

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

var mySet = new Set();

这段代码定义了什么:

  • Set:对象(原型Function.prototype
  • mySet:具有1个属性的对象(原型Set.prototype): 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:具有1个属性的对象(原型Set.prototype): a:数字(值= 1)
© www.soinside.com 2019 - 2024. All rights reserved.