我想创建一个在创建对象实例时自动实现的方法,就像类构造函数的概念一样。
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);
答案 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();
编辑:我知道有更好的方法可以实现这一目标,但这可以完成工作。