JS貌似没有类的概念, 所有JS的入门资料里讲的都是xxx对象. 但是这个对象有个非常奇怪的地方, 他能具备其它对象才有的成员属性.我经常会遇到这种让人摸不着头脑情况. 看人家的代码,看到某某对象带上了一个没见过的属性(或方法),去翻资料,不对啊,默认js的该对象明明没有这个属性啊.再一查,哦,是xml dom里的某像的属性.但是我这明明是html. 怎么会和xml扯上关系呢.换言之js里的对象到底有没有所谓的继承关系,就和现在大部分面向对象语言那样的类继承关系?这样至少我查某个对象有哪些成员时不会像现在这么摸不到头脑

解决方案 »

  1.   

    html应该是xml的子集
    xml默认可以随意增加属性另外 你千万别把  js  html dom(Document Object Mode)搞混淆了
      

  2.   

    F12 and input the following codeconsole.log(Object);
    console.log(Window);这两个是最大的父级,然后其它的都会继承这两个。
      

  3.   


    这个说法还是太笼统了,我是不是可以认为html里可以应用xml dom document的所有属性呢?
    xml随意增加属性是什么意思?这不太科学,难道说你能把href属性增加到一个非a标签上?
    我现在就是搞不清楚js,html,xml以及其它我还不知道的领域和document之间的关系,貌似js创建document的语法都一样,但是引用的属性和方法千差万别,这让我从C++过来的感到很不适应,既然面向对象就该有继承关系,既然有继承关系那么就应该某些对象有某些属性某些没有,在js上我看不到这些,我感到很困惑
      

  4.   


    要在chrome或firefox的F12之后,打开调试窗口,在下面的,输入两行代码。
    以chrome的console面板中输入,在firefox 打开firebug之后,控制台面板在最下边三个大于号的地方输入。然后查看结果。
      

  5.   

    可以看到windows对象的一堆成员,但是object的怎么啥都没有?还能看到其它的吗?其实我现在最需要的是彼此的继承关系
      

  6.   


    当然可以把href属性增加到一个非a标签上呀。最多是在非a标签中不能实现超链接的功能而已。但它确确实实就是一个自定义的属性,写插件时,将某些自定义属性附加到元素节点上,本来就是很常规则且实用的手法呀就好比你说你做c++的,你定义一个类,不也照样可以有N个属性或方法吗?只能说有些是常规的属性,它原醚归属于某些特定的标签,但同样不妨碍我附加到其他标签上。只是可能达不到它原有的功能而已。一般这种方法都是用来存储一些数据或状态的<script type="text/javascript">
        window.onload=function(){
            alert(document.getElementById('test').getAttribute("href"))
        }
    </script>
    <div href="aaaa" id="test">dddddd</div>
      

  7.   

    你的问题是没清楚js的对象模型,
    js对象模型是集合,可以随意往集合中添加成员,所以任何类型的js对象带上构造时没有的属性都是正常的,合法的
    比如Array对象:
    var arr=new Array();
    arr.a='a';
    alert(arr.a);
    明白了么?资料不会告诉你数组拥有a成员,但你往数组对象中添加a成员是符合js语法的;
    你要找对象成员的来源,对象的成员来自两种方式:
    1.直接给对象集合添加某成员,比如  构造函数或方法中 this.xx=xx 以及对象外部 obj.xx=xx
    2. 原型链上的成员,比如 function test(){};test.prototype.xx=xx;这样所有 通过new test()得到的对象都可以访问xx成员
      

  8.   

    完全可以把href放在一个非a标签上。
    加些奇奇怪怪的标签都可以。
    就像这样<div id="test" href="" IsShow="true" type="box"></div>使用时:var test = document.getElementById("test");
    var type= test.getAttribute("type");//href IsShow
    alert(type);