检查是否已分配toString
这个问题在这里已经有了答案:
像obj.hasOwnProperty('toString')
obj.hasOwnProperty('toString')
取决于你的toString
实现的创建方式。 我做了一些简单的测试:
function A() {
}
A.prototype.toString = function(){
console.log("A.toString");
};
function B() {
this.toString = function(){
console.log("B.toString");
}
}
var t = [new A(), new B(), new A()];
for(var i=0; i<t.length; i++) {
var hasOwnToString = t[i].hasOwnProperty("toString");
console.log(hasOwnToString);
if(hasOwnToString) {
t[i].toString();
}
}
结果:
false
true
B.toString
false
对于A风格来说这是false
,但对于B风格来说这是true
您可以检查toString函数是否与Object
(所有对象下降的对象)相同,
function hasUserPrototype(obj) {
return Object.getPrototypeOf(obj).toString !== Object.prototype.toString;
}
请参阅检查对象是否具有用户定义的原型?
function Foo()
{
}
// toString override added to prototype of Foo class
Foo.prototype.toString = function()
{
return "[object Foo]";
}
var f = new Foo();
function Boo()
{
}
var g = new Boo();
function hasUserPrototype(obj) {
return Object.getPrototypeOf(obj).toString !== Object.prototype.toString;
}
document.write(hasUserPrototype(f)); // true
document.write(hasUserPrototype(g)); // false
链接地址: http://www.djcxy.com/p/27315.html