首页 > 解决方案 > 如何断言传递给类构造函数的函数是通过引用传递的,并且在使用组合时不重复?

问题描述

在下面的代码中,我可以轻松断言它zombieZombie.

zombie被创建时,函数bitmapRenderer被发送给它并成为render()“Zombie”中的函数。

我假设 asbitmapRenderer是一个函数,它是一个对象,它是通过引用传递的。我可以创建任意数量的僵尸,并且不再创建任何bitmapRenderer函数,不会浪费内存,但是我如何通过断言来证明呢?

function bitmapRenderer(drawable) {
    console.log('I am bitmapRenderer function', drawable);
}

class Zombie {
    constructor(renderer) {
        this.renderer = renderer;
        this.x = 100;
        this.y = 100;
        this.name = 'zombie';
    }
    render() {
        this.renderer(this);
    }
}

const zombie = new Zombie(bitmapRenderer);
console.assert(zombie instanceof Zombie);

标签: javascriptunit-testing

解决方案


只需使用console.log(zombie.renderer === bitmapRenderer);

这证明它们是相同的,因为对象,即使它们具有相同的属性,也将始终被视为不相等,除非它们是相同的引用。

var obj1 = { "a": "A" };
var obj2 = { "a": "A" };
console.log(obj1 === obj2); // false

var obj3 = obj2;
console.log(obj2 === obj3); // true

推荐阅读