Javascript - 在类中转换对象

时间:2015-09-04 17:18:56

标签: javascript

我是JS的新手,我已经习惯了传统的OOP语言,所以我很难让一些东西正常工作。

以下是我的例子:

MyComboBox

显然'secondObj'覆盖了之前'fristObj'所做的事情。我如何转换'myObject'对象,使它可以像一个类一样工作,所以我可以创建它的各个新实例?

谢谢!

4 个答案:

答案 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这样的单独对象的面料。