Javascript 通过return和this关闭公共方法

Javascript 通过return和this关闭公共方法,javascript,closures,Javascript,Closures,在阅读和搜索了一段时间之后,我不理解以下两个javascript结构“Duck”和“Dog”之间的任何功能差异: function Duck(){ this.quack = function(){console.log('quack');}; }; function Dog(){ return{ bark : function(){console.log('bark');} } }; 这里是JSFIDLE,我在这里对代码进行了一些处理,以防您需要一个简

在阅读和搜索了一段时间之后,我不理解以下两个javascript结构“Duck”和“Dog”之间的任何功能差异:

function Duck(){
    this.quack = function(){console.log('quack');};
};

function Dog(){
    return{
        bark : function(){console.log('bark');}
    }
};

这里是JSFIDLE,我在这里对代码进行了一些处理,以防您需要一个简单的链接来尝试自己:

第一种形式允许您使用原型,第二种形式不允许。p、 我以为我是通过给一个函数分配Dog.prototype.bark2来测试的,但我刚才试过了,就像你说的,它不起作用。对于这个过于简单的问题,我深表歉意-谢谢你的链接。如果你省略了
new
关键字,这也会有所不同。由于
Duck()
没有显式的return语句,因此它不会返回任何内容,而如果您通过在它前面加上
new
将其视为构造函数,它将隐式返回
this
(新对象)
Dog()
将始终返回一个新对象。