构造函数中的JAVASCRIPT函数

时间:2017-12-29 12:58:27

标签: javascript function methods constructor

之间的区别是什么
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;

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

2 个答案:

答案 0 :(得分:1)

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

在第二个例子中

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

是一个全局变量。 new Set会使用属性_v2s

设置全局变量next

在第三个中,您将_v2属性设置为类本身。这意味着,当您构建Set时,将不会使用您的集创建_v2。只能通过致电Set._v2

来访问它

希望这不会令人困惑。

答案 1 :(得分: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:object(原型Function.prototype
  • mySet:具有2个自有属性的对象(原型Set.prototype):
    • a:number(value = 1)
    • _v2s:一个对象(原型Function),有一个名为next的自有属性,是一个数字(值= 1000)

<强> 2。第二个例子:

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

var mySet = new Set();

此代码定义的内容:

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

第3。第三个例子:

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

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

var mySet = new Set();

此代码定义的内容:

  • Set:object(原型Function.prototype),拥有1个自己的属性:
    • _v2s:与之前相同,但它现在是Set对象的自有属性。
  • mySet:具有1个自有属性的对象(原型Set.prototype):
    • a:number(value = 1)