解决方案 »

  1.   

        console.log(new A instanceof Array);// true
        console.log(new A instanceof Object);// true  它也是真呀,原因是 Array 是 object 的子类
      

  2.   

    首先
    A的prototype设成[]  應該改成 A的prototype 設成 Array的prototype
    new 關鍵字是產生實例 100%是Object
    ({}).toString.call(new A) 應該改成 Object.prototype.toString.call(A)樓主應該再對js的prototype加強一下觀念
      

  3.   

    照樓主需求
    應該改成 ({}).toString.call(A.prototype)
      

  4.   

    我认为楼主写法没有问题。
    我搭个顺风车想请教1楼一个问题既然他们都是Array类型那么为什么会有两种显示方式呢?
      

  5.   

    console.log(new A().constructor);//new A() 的构造器是 A()
    console.log([].constructor);//[] 的构造器是 Array()根据规定,所有引用类型的值都是Object 的实例。因此,在检测一个引用类型值和Object 构造函数时,instanceof 操作符始终会返回true。也就是console.log(new A instanceof Object);返回真的原因。问题是把(new A)与[](Array)划等号是错误!(new A)是Object实例,只是它的原型改成指向数组而已,与[]压根是两回事。
    而且[]的构造器仍是Object;
    console.log([].constructor instanceof Object);// true
      

  6.   

    有空看看toString函数的具体代码。
      

  7.   

    instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型function A(){this.constructor = A;}
    A.prototype = [];//这句相当于A.prototype = new Array(),相当于A继承了Array,这就是原型链继承
    console.log(new A instanceof Array)//因为A继承了Array,所以这句是true
    ({}).toString.call(new A)//因为A只是继承了Array,拥有Array的一切方法,但本身并不是Array,所以返回[object Object]
      

  8.   

    题主在这里说了两件事,一件是instanceof,一件是toString
    instanceof :
    举例 a instanceof B,B.prototype在a的原型链上的时候,返回true
    对应题主的条件设置,new A instanceof Array,new A instanceof Object是true,new A instanceof Function是false,原因在于A.prototype = [];,没有这句话则new A instanceof Function,new A instanceof Object是true。
    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceoftoString
    需要看({}).toString 方法时如何实现的,当它的this分别是xxx时,怎么办?查到的结果是与[[Class]]有关。 new Function()时[[Class]]为Function,new Array()时[[Class]]为Array, new A()时该值为Object。
    function A(){ return function(){}};
    ({}.toString(new A()));  是什么呢?答案是Object
      

  9.   


    function A(){}
    new A instanceof Function
    false // 这边返回是false呢。。 A instanceof Function
    true //这边返回是true
      

  10.   

    constructor:保存着用于创建当前对象的函数。可以通俗理解谁生它出来。
    如果是 new A() 本身是没有prototype的
      

  11.   


    function A(){}
    new A instanceof Function
    false // 这边返回是false呢。。 A instanceof Function
    true //这边返回是true

    function A(){}
    new A instanceof Function//因为这里你是new A,new出来的是对象。当然会是false
    false // 这边返回是false呢。。