javascript - 如何检查原型(prototype)函数是否不同

标签 javascript comparison prototype

<分区>

有没有办法检查功能是否不同,即使它们来自同一原型(prototype)? 我问这个是因为我需要将函数存储在一个数组中,当我尝试删除其中一个时,它会删除所有函数,因为原型(prototype)是相同的。

例如,在下面的代码中,当比较两个函数时,程序将返回 true。

var Car = function(name) {
  this.name = name;
};

Car.prototype.checkLights = function() {
  // some calculation...
};

var Nissan = new Car('nissan');
var Toyota = new Car('toyota');

// this will return true even though functions came from different objects
console.log(Nissan.checkLights === Toyota.checkLights) 

最佳答案

我不完全清楚你的要求(通过查看你的代码),但是你的新对象 NissanToyota 都是 Car 的实例> 使用共享的 prototype 对象。

这意味着,无论您对原型(prototype) [函数/属性] 进行什么更改,都会反射(reflect)在其他对象中。

如果你想让他们独立行事,那么你可以这样做:-

成员函数

    var Car = function(name) {
        this.name = name;

        // add as member function
        this.checkLights = function(){
            // some calculation...
        };
    };

    var Nissan = new Car('nissan');
    var Toyota = new Car('toyota');

    console.log(Nissan.checkLights === Toyota.checkLights); // false

Now, I would highly advise against it unless you have a very specific case, this will create a new instance of checkLights() function every time you run constructor of Car

关于javascript - 如何检查原型(prototype)函数是否不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221049/

相关文章:

javascript - Knockout.js 计算数组属性

javascript - 如何使用 POST 路由从表单中检索数据?

JavaScript .bind(this) 导致函数丢失名称属性 - bug/功能?

java - ModeShape 提供 JackRabbit 不提供的哪些功能?

prolog - Prolog中@<和<之间的算术差异

IE8 中 JavaScript 字符串比较

c - 错误 : No previous prototype for function. 为什么会出现此错误?

javascript - settimeout 没有被清除

javascript - "indexOf"作为 IE8 中 "for ... in"cicle 数组的键

javascript - 扩展原型(prototype)而不是声明整个对象的优点