Javascript js对象实例中的差异
我对这类东西不熟悉,我阅读了几篇js教程,发现了这两种类型的函数编码标准,如下所示:Javascript js对象实例中的差异,javascript,Javascript,我对这类东西不熟悉,我阅读了几篇js教程,发现了这两种类型的函数编码标准,如下所示: return({ error: function(message){ // Code here }, debug: function(message){ // Code here } }); 还有一个像 this.err
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
标识对象类型、具有公共构造函数等功能。。。