js对象实例的差异

时间:2014-06-18 04:31:26

标签: javascript

我是这类新手的新手,我经历了几个js教程,我发现了这两种函数的编码标准,如下所示:

 return({
           error: function(message){
                     // Code here
            },
           debug: function(message){
                     // Code here
           }
       });

另一个喜欢

 this.error = function(message){
    //Code Here

    };
    this.debug = function(message){
    //Code Here

    };
return this;

我是编码新手,所以对编码格式有一点了解。你能解释一下两个片段之间的基本区别吗?但两者的用法是一样的。

2 个答案:

答案 0 :(得分:1)

他们几乎一样。

第一个从函数返回一个对象文字:

 app.factory('myFactory', function() {
    var var1 = 'a';
    var var2 = 'b';
    return  {
         method1: function() { ... },
         method2: function() { ... },
         property1: var1,
         property2: var2
    };
 });

第二个返回Angular将调用的函数,如下所示:var fn = new MyFunction();这基本上就是服务。

app.service('MyFunction', function() {
     var var1 = 'a';
     var var2 = 'b';
     this.method1 = function() { ... };
     this.method2 = function() { ... };
     this.property1 = var1;
     this.property2 = var2;
});

服务使用'这个'关键字,因为函数构造函数被调用(new MyFunction())。

两者都是单身,两者都是可注射的。正如你所看到的,两者之间几乎没有什么区别。

答案 1 :(得分:0)

这是在JavaScript中实现构造函数的两种不同方式。区别在于你如何调用构造函数。

如果是

function Foo(){
  return { bar : 1 } ;
} ;

通过将其称为Foo()或新Foo()或X.Foo()来调用它来创建对象的新实例。然而构造函数属性将是Object构造函数。

但是在

的情况下
function Foo(){
  this.bar = 1 ;
  return this ;
} ;

当它被调用为新的Foo()时,它将返回一个带有构造函数Foo的对象,当调用它为Foo()时它将返回全局对象,并且你将在全局对象中有bar = 1,并且它将在返回时返回X如果X具有方法Foo,则将其称为X.Foo(),并且X将具有bar = 1属性