Я искал много на Google, но не удалось найти, где я искал:JavaScript hasOwnProperty против TYPEOF
Benefit of using Object.hasOwnProperty vs testing if Property is undefined
How to determine if Native JavaScript Object has a Property/Method?
.. и много других сайтов, но это не то место, где я ищу. Мой настоящий вопрос:
Почему hasOwnProperty
не найти способ в его суперклассе (прототипе)? И почему кто-то даже использует hasOwnProperty
? Он намного медленнее, чем typeof
, и он не работает, если вы работаете с наследованием.
.. второй вопрос:
this В вопросе Барни отвечает, что вы должны использовать if ('property' in objectVar)
, чтобы проверить, если свойство существует, но не объясняет, почему. Кто-нибудь знает, почему вы использовали бы эту структуру?
var objA = function(){};
objA.prototype.alertMessage = function(){
return 'Hello A';
};
var objB = function(){
this.hello = function(){
return 'hello';
};
};
// Inheritance
objB.prototype = Object.create(objA.prototype);
objB.prototype.constructor = objA;
var test = new objB();
if (test.hasOwnProperty("alertMessage")){
console.log("hasOwnProperty: " + test.alertMessage());
}
if (typeof test.alertMessage === "function"){
console.log("typeof: " + test.alertMessage());
}
if (test.hasOwnProperty("hello")){
console.log("hasOwnProperty: " + test.hello());
}
if (typeof test.hello === "function"){
console.log("typeof: " + test.hello());
}
'typeof' и' hasOwnProperty' не связаны. Оператор 'in' используется для проверки свойств в цепочке прототипов, тогда как' hasOwnProperty' проверяет только непосредственно на этом объекте. Если вы заботитесь о производительности с помощью 'typeof' /' hasOwnProperty', самым быстрым способом является, вероятно, просто использовать оцененное значение (поскольку 'undefined' оценивается как' false'), например. 'if (test.alertMessage)' – Johan