Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js对象实例中的差异_Javascript - Fatal编程技术网

Javascript js对象实例中的差异

Javascript js对象实例中的差异,javascript,Javascript,我对这类东西不熟悉,我阅读了几篇js教程,发现了这两种类型的函数编码标准,如下所示: return({ error: function(message){ // Code here }, debug: function(message){ // Code here } }); 还有一个像 this.err

我对这类东西不熟悉,我阅读了几篇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;

我在编码方面是新手,所以对编码格式有一点了解。你能解释一下以上两个代码片段的基本区别吗?但它们的用法是一样的

它们几乎一样

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

 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;
});
服务使用'this'关键字,因为调用了函数构造函数(new MyFunction())


两者都是单态的,都是可注射的。正如您所看到的,这两者之间没有什么区别。

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

万一

function Foo(){
  return { bar : 1 } ;
} ;
通过将对象称为Foo()或new Foo()或X.Foo(),可以调用create对象的新实例。但是,构造函数属性将是对象构造函数

但是万一

function Foo(){
  this.bar = 1 ;
  return this ;
} ;

当调用它为new Foo()时,它将返回一个具有构造函数Foo的对象;当调用它为Foo()时,它将返回全局对象;当调用它为X.Foo()时,它将返回X。如果X具有方法Foo,则X将具有bar=1属性;在第二种情况下,是否使用过原型链?我只是好奇,我不是Angularjs的用户。我想是的,虽然我不是prototype的忠实粉丝,也不是prototype的知识渊博者,但是Robg并不是说prototype库,而是JavaScript中自然出现的prototype链。我不确定that@pixelbits-嗯,因此,在其他地方,您可以声明或初始化MyFunction并设置MyFunction.prototype方法,然后执行
app.service('MyFunction',MyFunction)
,即使用函数引用而不是函数表达式。它们都分配
error
debug
属性,但可以通过
{…}为它们创建一个新对象
而另一个通过
修改现有对象。这种差异会产生什么影响取决于周围的环境和
的值。你能扩展你的代码片段吗?它们都不使用原型,也许是时候阅读不同的教程了:你能展示一下这些代码片段是如何被调用的吗?在你的两个简单示例中没有太大的区别,但是使用
new
操作符和原型链(与第二个选项更兼容)支持更高效的方法存储、更简单的继承、使用
instanceof
标识对象类型、具有公共构造函数等功能。。。