Javascript 获取原型函数下的对象类型
有人知道如何在原型属性下获取对象的类型吗?i、 e.我有下一个代码:Javascript 获取原型函数下的对象类型,javascript,object,typeof,prototype-programming,Javascript,Object,Typeof,Prototype Programming,有人知道如何在原型属性下获取对象的类型吗?i、 e.我有下一个代码: Object.prototype.someproperty = function(){ ...do something... console.log(typeof this); ..more... } 在我的代码中,这总是导致“函数”,因为对象的构造函数是函数。当我这样打电话的时候 Array.someproperty(); //In this i want get "array" //or String.someprop
Object.prototype.someproperty = function(){
...do something...
console.log(typeof this);
..more...
}
在我的代码中,这总是导致“函数”,因为对象的构造函数是函数。当我这样打电话的时候
Array.someproperty(); //In this i want get "array"
//or
String.someproperty(); //In this i want get "string"
我想得到“数组”而不是“函数”。。。有人知道怎么做吗?这里的问题是,当通过
Array
和String
调用时,this
绑定到函数,而不是类型的实例。我所知道的确定调用这些函数中的哪一个的唯一方法是执行如下的手动测试
Object.prototype.someproperty = function() {
if (this === Array) {
return "array";
} else if (this === String) {
return "string";
}
...
}
在本例中,虽然您实际上没有报告从中调用原型的对象的类型。“函数”的值对此非常准确。这比真正的类型测试更具启发性最后,经过大量阅读和学习,我发现扩展原型对象是非常糟糕的做法。感谢大家的支持。typeof[]将始终返回“object”,因为所有数组都是对象(在JavaScript中)。检查数组的更好方法是--
Object.prototype.toString.call(yourVariableHere)=='[Object array]'
我已经用这样简单的“name”解决了我的问题。Object.prototype.myfn=function(){返回this.name;}String.myfn()//返回“String”数组.myfn()//返回“Array”函数.myfn()//返回“Function”Object.myfn()//返回“Object”Number.myfn()//返回“Number”我将“someproperty”改为“myfn”引起争议。Thanx伙计们。啊,再一次,你们只对函数应用了myfn
!如果这是您的意图,您应该扩展Function.prototype
,而不是Object.prototype
。这有非常真实的原因。另外,如果您需要完全的浏览器支持,函数上的.name
是一个非标准属性,在某些浏览器中不起作用。如果OP真的想这样做,那么扩展函数.prototype
将是一种改进。@。我不能100%确定这次行动的目的是什么。我最初的反应是,他们想要一个在所有实例上都能工作的函数,但随后又困惑了为什么在数组
和字符串
构造函数上使用失败。如果是这样的话,对象
上的扩展就更有意义了。总的来说,尽管这种类型的测试在bestYeah看来注定是脆弱的,但这是令人困惑的,特别是因为该方法名为someproperty
。但不管怎样,IMOObject.prototype
扩展(无论如何都是可枚举的扩展)很少有意义。但如果这是OP想要的,那就是OP得到的是的,我想扩展所有对象;字符串、数组、函数以及扩展所有类型的通用函数。示例:Array.mynewextendfn('nameofn',function(){})
并将nameofn添加到注册表数组中。是如此罕见,但对我的项目是重要的。最后,经过大量的阅读和学习,我发现扩展原型对象是非常糟糕的做法。我感谢大家的支持。