让我们考虑一下这个代码示例:
function Bird() {
var self = this;
this.getType = function() {
return self.type;
};
}
function Eagle() {
Bird.call(this);
this.type = "Eagle";
}
function Sparrow() {
Bird.call(this);
this.type = "Sparrow";
}
function Bat() {
Bird.call(this);
this.type = "Bat";
}
var e = new Eagle();
console.log(e.getType());
此处Bird
类型已正确设置,但我想确定Bird
级别的类型。但是,要实现这一点,我需要知道哪个函数叫Bird。但是,如果我做这样的事情:
function foo() {
return new Bird();
}
然后我想确保foo().getType()
导致undefined
。这可能吗?
答案 0 :(得分:2)
您不需要使用电话:
function Bird(self) {
var type;
if (self) {
type = self.constructor.name;
} else {
self = this;
}
self.getType = function () {return type;};
}
function Eagle() {
Bird(this);
}
var e = new Eagle();
console.log(e.getType()); // Eagle
console.log(new Bird().getType()); // undefined
答案 1 :(得分:1)
使用
self.constructor.name
获取对象的名称。 正如@Lojas Arpad建议的那样,设置类型一次,这样就不需要每次比较了。
function Bird(self) {
var self = this;
var type = self.constructor.name === 'Bird' ? undefined : self.constructor.name;
this.getType = function() {
return type
};
}
function Eagle() {
Bird.call(this);
}
function Sparrow() {
Bird.call(this);
}
function Bat() {
Bird.call(this);
}
var e = new Eagle();
console.log(e.getType());
function foo() {
return new Bird();
}
console.log(foo().getType())