创建Javascript类的正确方法是什么?
我试图弄清楚如何正确构造Javascript类(或单例对象)创建Javascript类的正确方法是什么?,javascript,oop,object,Javascript,Oop,Object,我试图弄清楚如何正确构造Javascript类(或单例对象) var obj = new Object(); obj.foo = 'bar'; obj.method = function() { ...} var obj = { foo : 'bar', method : function() { ...} } var obj = function(){} obj.prototype = { foo : 'bar', method: function() {
var obj = new Object();
obj.foo = 'bar';
obj.method = function() { ...}
var obj = {
foo : 'bar',
method : function() { ...}
}
var obj = function(){}
obj.prototype = {
foo : 'bar',
method: function() { ... }
}
我希望能够设置一些属性并分配可用的方法。我还希望能够在对象上使用类似的东西,以便可以使用类似的东西扩展这些对象
我试图弄清楚如何正确构造Javascript类(或单例对象)
var obj = new Object();
obj.foo = 'bar';
obj.method = function() { ...}
var obj = {
foo : 'bar',
method : function() { ...}
}
var obj = function(){}
obj.prototype = {
foo : 'bar',
method: function() { ... }
}
这些(“类”和单例对象)之间有很大的区别。前两个示例是一次性对象(单例)。您的第三个(最后一个)示例创建了一个构造函数,该构造函数允许您创建共享同一原型的多个对象。我建议在构造函数函数中增加prototype
属性,而不是在执行时替换它,例如:
var Thingy = function() { // Or use a function declaration rather than expression
// Optional initialization code here
};
Thingy.prototype.foo = 'bar';
Thingy.prototype.method = function() {
// Method code here
};
(按照惯例,构造函数以大写字母开头。)
您使用的(单例函数或构造函数)取决于您需要什么
截至ES2015(也称为“ES6”),它更简单,尽管没有新的语法来定义非方法原型属性(您的foo
);一旦向前推进,ES2017或ES2018可能会出现以下情况:
class Thingy {
constructor() {
// Optional initialization code here
}
method() {
// Method code here
}
}
Thingy.prototype.foo = 'bar';
如果您需要进入继承层次结构,在旧的ES5语法中,有相当多的管道:
var Base = function() {
};
Base.prototype.method = function(arg1) {
// ...
};
var Derived = function() {
Base.call(this);
};
Derived.prototype = Object.create(Base.prototype);
Derived.prototype.constructor = Derived;
Derived.prototype.method = function(arg1) {
// Using Base's `method`, if desired, is a bit ugly:
Base.prototype.method.call(this, arg1);
};
…这就是为什么你经常看到库介入,比如Prototype的类
之类的东西,或者我自己的;但是,根据ES2015语法,这些已经过时,这使得它变得非常简单:
class Base {
method(arg1) {
// ...
}
}
class Derived extends Base {
method(arg1) {
// Use's the superclass's `method`, if desired, is easy:
super.method(arg1);
}
}
你的问题的标题是:
创建Javascript类的正确方法是什么
有几种同样正确的方法可以在JavaScript中创建对象的“类”,因为JavaScript是一种非常灵活的语言。有标准的构造函数、“构建器”函数、
Object.create
(在支持ES5的环境中),它允许您执行更直接的原型继承,还有其他一些。JavaScript的一大优点是,您可以选择自己的“类”样式。您还可以使用以下内容:
function O(x,y) {
this.x=x;
this.y=y;
this.method=function() {...}
return this;
}
var o=new O(0,0);
如果您的目标浏览器或环境支持ES5,则可以执行以下操作:
var Person = {
foo: ...,
bar: ...
};
var Mike = Object.create(Person, { baz: ... });
如果你在寻找一个实际的解决方案,而不是理论上的,你最好使用一个框架
- 拥有您所需要的一切,包括mixin和事件系统
原型,因此充当类的角色
例如,当您调用Ext.define('MyClass',{extend:'ParentClass',mixins:foo,…})
时,Ext会创建一个函数
“MyClass
”,以及一个匿名对象(MyClass.prototype
),其中包含您提供的方法。规则#1:永远不要使用新对象()
@minitech,您确定吗?他们一定是出于某种原因才这样做的。@Xeoncross他们也制作了新窗口
,但您不能使用它;)新的阵列,新的号码,新的。。。最好使用literalsn将字符串文本传递给新字符串
构造函数不是很讽刺吗?