我是JS的新手,我已经习惯了传统的OOP语言,所以我很难让一些东西正常工作。
以下是我的例子:
MyComboBox
显然'secondObj'覆盖了之前'fristObj'所做的事情。我如何转换'myObject'对象,使它可以像一个类一样工作,所以我可以创建它的各个新实例?
谢谢!
答案 0 :(得分:3)
要在javascript中创建一个'class',你需要创建一个按照惯例使其第一个字符大写的函数。
function MyClass() { }
var obj = new MyClass();
要将方法附加到此方法,请将其添加到MyClass
的{{1}}。
prototype
要添加属性,请使用MyClass.prototype.callme = function () {
console.log('you called me');
}
来引用该类的此实例。
this
所有在一起:
function MyClass() {
this.prop = 'something';
}
答案 1 :(得分:2)
有一种JS编程风格,你只需创建返回对象的对象和函数。在您的情况下,将myObject
放入一个返回哈希值的函数中。每次调用它都会返回一个新的。
var myObject = function() {
return {
prop: 'something';
callme: function () {
console.log('you called me and prop is', this.prop);
}
};
}
firstObj = myObject();
firstObj.prop1 = 'new thing';
firstObj.callme();
secondObj = myObject();
secondObj.prop1 = 'second thing';
secondObj.callme();
答案 2 :(得分:2)
除了你已经拥有的两个好答案之外,我想指出,如果你准备好使用边缘内容,ES6,下一个JavaScript规范,包括类。
使用像babel这样的转发器,你已经可以编写ES6代码然后编译它,以便它可以在所有浏览器上运行。它的工作效果非常好,特别是当与webpack等自动化过程的工具结合使用时,会引发越来越多的技巧。这是未来,显然更糟糕的尝试(课程只是冰山一角)。
您可以阅读有关ES6课程here的更多信息。以下是他们给出的一个例子:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
get area() {
return this.calcArea()
}
calcArea() {
return this.height * this.width;
}
}
答案 3 :(得分:0)
对实际问题的理论答案。 JavaScript在OOP方面比大多数当前的OOP语言更传统(例如SmallTalk - 其中一个JavaScript祖父母)。它是prototype-based,意味着对象从其他对象继承。为了典型的OOP类模仿,构造函数是一个令人不愉快的遗留(也称为“经典继承”)(在class
只是大多数流行OOP中对象的结构的方式中,典型的JavaScript对象是{ {3}}用于其他对象)。类似的例子可能是fabric语言(为简单起见而给出)。 IMO不需要像class
这样的单独对象的面料。