var methods = {name:"aName",area:function(){return 88;},toString:function() {return "testToString";}};
for(var p in methods){
alert(p + " " + methods[p]);
}
为什么methods对象的toString属性 不能够alert出来
解决方案 »
- twitter oAuth认证 跨域post iframe X-Frame-Options禁止
- 多核情况下javascript关闭弹出窗口的问题
- 怎样将一下Execl中的模块代码搬到javascript中使用
- 关于table的显示问题
- 有關于getElementById("服務器控件id")
- 关于javascript学习的进一步提问!~
- 谁能帮我区分一下这两段js代码的区别?
- 一定给分:哪里有javascript涵数大全的书下载的??
- 寻:用javascript实现的小写金额转大写金额的函数
- 请问JS中有没有try--catch这种捕获异常的方法呢?
- 【马上结贴】查询某个文件夹是否存在,如何实现
- this对象提示不是一个函数
for(var p in methods){
if(methods[p]=="aName")
alert(p + " " + methods[p]);
else
alert(p + " " + methods[p]());}methods["toString"]取得的是一个指向函数的引用,alert出来只是函数的代码。
需要加个括号()来将其执行。
for(var p in methods){
if(!methods[p].hasOwnProperty("tostring"))
{
//dosomething
}
} 试试
JS/ECMAScript对象的属性,都具有一个布尔类型的[[Enumerable]]特性,为真时表示此属性可以在for in中被枚举,反之不能(ECMA-262)。
而JS中内置对象的预定义属性貌似都是不可枚举的,所以对一个新建的空Object使用for in得不到任何属性。
可以对一个对象调用propertyIsEnumerable()方法来查看其某属性是否支持枚举:
var a = [0];
alert(a.propertyIsEnumerable('length'));
alert(a.propertyIsEnumerable(0));
alert(a.propertyIsEnumerable(1));
var methods = {name:"aName",area:function(){return 88;},toString:function() {return "testToString";}};
var methods2 = {name:"aName",area:function(){return 88;}};function enumTest(obj) {
for(var p in obj){
alert(p + ':' + obj[p]);
}
if (obj.toString != Object.prototype.toString) {
alert('toString' + ':' + obj.toString)
}
}
alert('methods:')
enumTest(methods);
alert('methods2:')
enumTest(methods2);
Object.prototype.toString = function(){
// your code
}
就可以了啊。
有两个类class A和class B
现在要做的就是想把classB里的所有属性(包括toString)复制到classA.
仔细看好下面的代码 function ClassB() {
this.name = "Jee";
}
ClassB.prototype.toString = function(){
return this.name;
};
function ClassA() {
this.name = "JeeChang";
}
ClassA.prototype = new ClassB();
var a = new ClassA();
alert(a.toString());
现在做的是鸭子类型(Duck Typing)(书上看的专业术语)
只是借用其他类的方法,但是不继承
类似于猴子掰玉米模式,比如 看到classB 有个toString方法 就拿了classB的方法用了,
如果接下来看到classC 也有个toString方法 就马上用classC的toString方法了...
诸如此类.