押30分赌toString是Object.prototype的方法.下注了啊,买定离手...
解决方案 »
- 字符串长度 div长度
- 求助图片加上JS特效以后白色变透明了
- ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●new a后,a里面return的啥都没用??????????????????
- jquery调用页面嵌套加载问题
- javascript如何实实现将信息中的一数字替换成特定文字
- 希望大家来看看这套JavaSctipt组件
- 请教call语法
- 在window.onbeforeunload 事件中,加入什么代码,可以阻止窗体被关闭?
- .jse文件是怎么回事?
- 求助关于ES6问题,items.filter(item => typeof item === type)这句怎么理解?item哪里来的?()括号内怎么理解?
- 问问这个脚本的问题
- javascript处理网页连接的问题.
window也有toString
但是window.toString != Object.prototype.toString
因为window对象不属于Object对象。。FF的话
window也有toString
但是window.toString != Object.prototype.toString
并且window对象 instanceof Object
以下有case
<script type="text/javascript">
Object.prototype.toString = function () {
return "30分到手";
};var o1 = {};
alert(o1);
alert(window instanceof Object && window.toString());
</script>
alert(Object.hasOwnProperty("toString"));
ECMA-262么有定义这个值
不同的ECMAScript实现具有不同的值
-----以上摘自JS高级程序设计
-_-!!
alert(Object.hasOwnProperty("toString"));
hasOwnProperty检测对象下时候有某方法。
但是不能检测原型的方法这里虽然证实了Object的toString属于原型。。
但是它不属于Object.prototype可以测试以下codeObject.prototype.toString = function () {
return "30分到手";
};alert(Object.toString());
Object.toString() 属于 Function.prototype ^o^
Function.toString() 也属于 Function.prototype<script type="text/javascript">
Function.prototype.toString = function () {
return "Object";
};Object.prototype.toString = function () {
return "Function"
};alert(Object.toString()); //属于Function原型
alert(Function.toString()); //属于Function原型
alert((function () {}).toString()); //属于Function原型
alert({}); //属于Object原型//哈哈看来我们的Function还是最凶悍的...它最大....alert(window.toString()); //但是window document location (以下省略若干) 都属于另一个原形滴...
</script>
return "30分到手";
};alert(Object.toString());//这能说明什么问题呢?
var o = {};
alert(o.toString());//改变的toString方法影响到这里的结果
<!--
Object.prototype.test = 'aaaa';
alert(Function.prototype.test);
//-->
</SCRIPT>
Object.prototype
Function.prototype
Object-Function-其他预定义类
因为Function.prototype属于Object对象的事例所以出现那种效果。。
demo :alert(Function.prototype instanceof Object);alert(Object.toString());//这能说明什么问题呢?
这里说明调用了Function.prototype.toString因为因为是Object对象的事例所以它的toString === Object.prototype.toString
但是function的话 属于Function.prototype.toString
系统对象的话。。属于另外一个未知的原型。。这样就有3种可能。。:D
但是我没有
Object.toString.toString()啊我是Object.toString()
所以结论没有问题吧?
接口是怎么用的呀, 有没有可能就是接口实现的?
那接口实现的是不是都各有某某方法.....
如果不是接口实现的...那写程序的人是不是不OOP了, 不OOP是不是不好,,,那是不是就是接口?
<script type="text/javascript">
Function.prototype.toString = function () {
return "Object";
};Function.prototype.text = 'aaaa';Object.prototype.toString = function () {
return "Function"
};Object.prototype.text = 'bbbb';alert(Object.toString());
alert(Function.toString());
delete Function.prototype.toString;
alert(Object.toString());
alert(Function.toString());alert(Object.text);
alert(Function.text);
delete Function.prototype.text;
alert(Object.text);
alert(Function.text);
/*
呵,看来是理解错了...
昂...看来有两种情况一种是非系统对象的Function Object 的事例toString
还有一种是系统对象的toString这么说来的话,从测试结果上看...是Object-Function
因为Function级别比Object第,所有后事例化,才导致优先执行Function的原型成员
*/
</script>
主要是因为它先执行了Function.prototype.toString
所以才会导致是系统函数。
:D
2.javascript是Prototype-Based 不是Class-Based
3.由于javascript是Prototype-Based 所以没有因为Function级别比Object低与
Function是Object子类等等的说法
4.使用Object.toString,调用的过程为new Object.prototype.toString.constructor().toString
5.typeof Object.prototype.toString.constructor //return function
6.也就是说toString为Function.prototype.toString,
7.也就是说各个对象的prototype fun继承了Function.prototype
8.要打我吗?我推翻了你提的问题
我测试的是alert(Object.toString());
不是alert(Object.toString);
你仔细看清楚2007-07-26 12:12:38
这个时间的回复
从已被实现的JS环境理解 和 从实现JS环境理解肯定会不一样的....
仔细看了看是不对,不过不是你说的那个不对
是这个Object.prototype,
即搂主的说的toString是object的还是object.prototype的我选后面
而不是我上次说的Function.prototype
原因还是上次说的一样
1.js是prototype-base语言。
2.js可以动态的添加property
3.运行过程为先查找实例是否含有指定名字的property,如果没有那么就查找它的原型对象(prototype),而对象的prototype其实也是个对象,也有自己的prototype,这样一直往上查找直到找到这个指定名字的property,如果当上朔的prototype为null时还没有找到该property,那么就会undefined
4.说不清楚那给个例子
<script>
//假设是Object.toString 那么重写他
Object.toString=function(){alert("是Object.toString 并重写了他")};
var o = new Object()
// 调用的是Object.prototype.toString
// 可以用alert(o.toString())测试
o.toString()
</script>
再来个比较下
<script>
//重写Object.prototype.toString
Object.prototype.toString=function(){alert("是Object.prototype.toString 并重写了他")}
o.toString()
</script>
5.这次够清楚了吧
//重写Object.prototype.toString
Object.prototype.toString=function(){alert("是Object.prototype.toString 并重写了他")}
var o = new Object()
o.toString()
</script>
Object的事例对象会继承Object.prototype.toString
而Function的事例对象会先继承Object.prototype.toString
然后在继承Function.prototype.toString
我给一个清晰整洁的测试DEMO:Dhttp://community.csdn.net/Expert/topic/5679/5679505.xml?temp=.871731
我觉得显然是IE,M$自己有个WScript/CScript,作为宿主,Object也没有说继承了WScript/CScript里的什么方法。
感觉M$有些自相矛盾,估计是两帮人干的?呵呵
合起来就是WCscript???这个偶喜。
================================================================
抱歉,
说这句话没经大脑。window.toString = function()
{
return "hack window";
}alert(window);FF还真去执行了window.toString(),而IE没有。
咱们再去alert(window.constructor); // return Window;
typeOf window.constructor 是 function;
那照这样说连window也是Object继承来的?不是。
因为delete Object.prototype.toString;后,alert(window)还是可以的。
那只能说这个。浏览器环境太复杂
var a = new Object();
var b = new Object();
alert(a.toString===Object.prototype.toString);
alert(a.toString===b.toString);自己看...
ps...梅老大幽默~~
IE的window里有toString方法但“重载”后非显式调用toString仍然会调用那个native code。
谁来解释一下?
WCscript只不过是win系统的脚本宿主...
跟IE没关系...
他们都调用那个叫M$ScriptControl的控件执行脚本...
=================================================
这点还真不知道了,能否介绍下?
说话又没过大脑...
好像也不是调用那个控件的...
system32下面有个msscript.ocx的东西...
自己研究下吧...不过还是不要去绕这些底层细节了...
总之,我在2007-08-09 11:31:45这个时间发的那段代码...
在IE和FF都是返回两个true的...
我觉得这就可以说明问题了...
function MyClass()
{
}
var inst=new MyClass();关系可以这样看待:
Object.prototype.toString
-->Function.prototype.toString (有默认值)
----->Object.toString
----->Array.toString
----->MyClass.toString
-->Array.prototype.toString (有默认值)
----->[1,2,3].toString
-->MyClass.prototype.toString
----->inst.toString
当Object.prototype.toString改变时, 所有toString都会被影响. 但其影响能被覆盖.
当Function.prototype.toString改变时, 所有函数都会被影响, 但函数类的实例不会被影响上面的关系图中,因为Array.prototype.toString已经有默认的值,
所以无论Object.prototype.toString是如何,
[1,2,3].toString 都是返回 "1,2,3"因为Function.prototype.toString也是有默认的值,
所以即使设置了自定义的Object.prototype.toString,
Array.toString(),MyClass.toString()依然是返回函数表达式字符串.