首页 > 试题广场 >

以下Javascript代码执行后的输出结果依次是:()

[单选题]
以下Javascript代码执行后的输出结果依次是:()
    ```javascript
    var tmp = {};
    var A = function() {};
    A.prototype = tmp;

    var a = new A();
    A.prototype = {};

    var b = Object.create(tmp);
    b.constructor = A.constructor;

    console.log(a instanceof A);
    console.log(b instanceof A);
    ```
  • true, false
  • false, true
  • true, true
  • false, false
因为在构造实例a之前,a的隐式原型指向tmp,但是在实例了a之后,a的隐式原型依旧指向tmp,但是A.prototype已经改变。
instanceof 操作符的原理:
左侧对象:A,搜寻他自身的隐式原型。
右侧对象:B,则是返回他的prototype属性

a.__proto__  = tmp
A.prototype = {}
所以不相等

同理,第二个也如此搜索
发表于 2019-03-28 10:42:18 回复(2)
var tmp = {}
var A = function () {}
A.prototype = tmp; var a = new A()
A.prototype = {};// 在用A new出了一个对象a后,改写了A的原型对象prototype会导致a无法再在A的原型对象上进行查找 
var b = Object.create(tmp);// 这是一个创建对象的方法,b的隐式原型(__proto__)指向tmp 
b.constructor = A.constructor; // 将A的构造函数(Function)赋给b,我理解其实这句话没什么影响,构造函数和原型函数本质上是有很大区别的。。。
// A instanceof B 即判断A是否是B的一个实例对象 
console.log(a instanceof A); // 因为改写过A的原型对象,因此a不再是A的实例,a.__proto__ != A.prototype 
console.log(b instanceof A); // 只是具有相同的构造函数,并不符合instanceof 判断为true的条件
编辑于 2019-04-11 00:07:45 回复(2)
发表于 2022-12-10 20:19:10 回复(1)