Javascript文字与功能oop

joh*_*ith 5 javascript oop literals prototype-programming

什么是使用这些的最佳做法?

var x = { a: 'a', eat: function() { }, ... }
Run Code Online (Sandbox Code Playgroud)

VS

var x = function() { var a = 'a'; this.eat = function() { }}
Run Code Online (Sandbox Code Playgroud)

以上需要启动:

new x();
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我解释这两者的重要性,哪一个是oop社区中的首选?任何智慧的话都会有所帮助.我也做了一些研究但没有出现.非常感谢.

har*_*rpo 4

基本区别在于第一个版本公开变量“a”,而第二个版本隐藏它。因此,除非您想要或需要客户端代码来访问x.a,否则首选第二个版本。

第三种方法是使用原型。在这种情况下,构造函数中的局部变量不会给您带来多大好处,因此如果eat()需要访问a,那么您可以编写:

function x() {
    this.a = 'a';
}

x.prototype.eat = function() {
    // do stuff with this.a
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每个实例都有一个新的 副本a,但只有一份eat. 缺点(如果您认为这是一个)是a可供实例用户使用的x