检查是否已分配toString

这个问题在这里已经有了答案:

  • 如何检查一个对象是否在JavaScript中有属性? 22个答案

  • 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

    上一篇: Checking whether toString has been assigned

    下一篇: Checking defined item in enum