Javascript文字vs函数oop
Javascript literal vs function oop
使用这些的最佳实践是什么?
var x = { a: 'a', eat: function() { }, ... }
和
var x = function() { var a = 'a'; this.eat = function() { }}
以上需要启动:
new x();
谁能帮我解释一下这两者的重要性,以及在面向对象社区中哪一个是首选?任何智慧之言都会有所帮助。我也做了一些调查,但一无所获。
基本区别在于,第一个版本公开了变量'a',而第二个版本隐藏了它。因此,除非您想要或需要客户端代码访问x.a
,否则首选第二个版本。
第三种方法是使用原型。在这种情况下,构造函数中的局部变量不会给你带来太多好处,所以如果eat()
需要访问a
,那么你可以这样写:
function x() {
this.a = 'a';
}
x.prototype.eat = function() {
// do stuff with this.a
}
在这种情况下,每个实例都有一个a
的新副本,但是只有一个eat
的副本。缺点是a
对x
实例的用户可用。
第一个将只创建一个对象,您不能将其与new
关键字一起使用。第二个包含一个局部变量a
,而不是像第一个那样创建一个属性。
函数通常写成命名函数,而不是赋值给变量的匿名函数:
function x() {
this.a = 'a';
this.eat = function() {};
}
现在你可以用它来创建对象了:
var y = new x();
为对象指定方法的另一种方法是将其放在原型中:
function x() {
this.a = 'a';
}
x.prototype.eat = function() {};
通常这取决于你想要得到什么。记住,JS没有真正的类,它是基于原型的语言。操作符new
很容易引起误解。
我建议在可能的情况下使用文字{}
。例如,您可以这样做:
var myconstr = function(param){
var pr = 'some private var';
return {
a : param,
get2a : function(){ return this.a; }
};
};
如果你只需要一个实例,你可以在定义了这个函数之后调用它。
但是如果你想使用prototype
,它可以更容易与构造函数-但仍然,我不会使用新的操作符,也许包装它在一些其他的函数会更好。
相关文章:
- Javascript OOP-从函数返回一个值;s在对象内部's方法(嵌套函数)
- javascript存储函数的OOP方式
- 调用Javascript OOP中的嵌套函数
- 调用事件处理程序oop内部的函数
- javascript严格模式下oop函数的全局初始化
- 如何从回调函数返回 var?OOP 属性
- 如何将JavaScript OOP转换为函数式
- Javascript OOP 原型函数返回 undefined
- OOP,命名空间的顶级方法内部的私有函数
- OOP getter函数应该返回私有属性的值或引用
- Javascript事件addEventListener为同一函数多次注册;使用OOP Javascript
- javascript OOP语法,以及既是var又是函数的对象
- 这个_get不是一个函数-javascript oop和原型
- Javascript OOP,类中的类,得到错误& &不是构造函数& &;,为什么
- 如何在构造函数中访问类变量?(node . js OOP)
- Jquery的oop重写方法函数
- Javascript OOP类-将属性分配给函数
- javascript OOP中使用回调函数后如何设置实例变量
- javascript OOP -不是函数
- jquery内部OOP函数的问题