// Objects with prototype are plain iff they were constructed by a global Object function
Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; //这行是什么意思?
return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
Di bawah adalah kod yang dinyatakan dalam kod rayuan
var class2type = {};
var toString = class2type.toString;
var getProto = Object.getPrototypeOf;
var hasOwn = class2type.hasOwnProperty;
var fnToString = hasOwn.toString;
var ObjectFunctionString = fnToString.call( Object );
var proto, Ctor;
proto = getProto( obj );
Dalam jQuery 3.2.1, dua baris terakhir fungsi yang menentukan sama ada objek adalah objek tulen tidak setara apabila saya mengujinya sendiri, saya ingin bertanya apa masalahnya
var obj = function(){};
var proto = Object.getPrototypeOf(obj);
var Ctor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
var objHasOwn = Object.hasOwnProperty.toString.call( Object );
var funcHasOwn = Object.hasOwnProperty.toString.call( Ctor );
console.log(funcHasOwn === objHasOwn); // 我使用纯 function 来测试,发现结果是 false
Tanya saya
Kenapa hasil keluaran adalah false
Object.hasOwnProperty.call(proto, "constructor") && proto.constructor;
Object.hasOwnProperty.toString.call( Object )
输出为function Object() { [native code] }
Object.hasOwnProperty.toString.call( Number )
输出为function Number() { [native code] }
Kenapa
1. var obj = function(){}; mengembalikan false kerana anda telah salah faham fungsi fungsi ini
Object.hasOwnProperty.toString.call(Number) adalah output sebagai function Number() { [native code] } kerana Object.hasOwnProperty.toString akan mengembalikan fungsi constructor objek dalam bentuk rentetan, dan kaedah panggilan meminjam daripada Object.hasOwnProperty toString kaedah.