创建一个模拟类构造函数的方法

时间:2016-12-09 00:33:54

标签: javascript

我想创建一个在创建对象实例时自动实现的方法,就像类构造函数的概念一样。

function myString(string) {
  // Storing the length of the string.
  this.length = 0;
  // A private constructor which automatically implemented
  var __construct = function() {
    this.getLength();
  }();
  // Calculates the length of a string
  this.getLength = function() {
    for (var count in string) {
      this.length++;
    }
  };
}

// Implementation
var newStr = new myString("Hello");
document.write(newStr.length);

实现上一个代码时出现以下错误消息:
TypeError: this.getLength is not a function

更新
问题出在this范围内。 以下是updade之后的构造函数方法:

var __construct = function(that) {
  that.getLength();
}(this);

1 个答案:

答案 0 :(得分:1)

Bergi在这个帖子中的回答更为相关:How to define private constructors in javascript?

虽然有点粗糙,但您可以创建一个名为init的方法,然后在函数的底部调用该方法,以便在实例化一个新对象时运行代码。

  function myString(string) {

  //Initalization function
  this.init = function() {
    this.calcLength();
  }

  // Storing the length of the string.
  this.length = 0;

  this.getLength = function() {
    return this.length;
  }

  // Calculates the length of a string
  this.calcLength = function() {
    for (var count in string) {
      this.length++;
    }
  };

  this.init();
}

// Implementation
var newStr = new myString("Hello");
var element = document.getElementById('example');
element.innerText = newStr.getLength();

编辑:我知道有更好的方法可以实现这一目标,但这可以完成工作。

编辑2:小提琴https://jsfiddle.net/ntygbfb6/3/