var a = new Object();
// 下面两句话是否有区别
a.companyName = “Microsoft”;
a[“companyName”] = “Microsoft”;
// 请简述下面两种写法的本质,涉及到javascipt语法的原理
var company = function() {};
company.get_name = function() {
return “Microsoft”;
}var company = function() {};
company.prototype.get_name = function() {
return “Microsoft”;
}

解决方案 »

  1.   

    var a = new Object();
    a.companyName = “Microsoft”;//给a对象增加companyName属性
    a[“companyName”] = “Microsoft”; //和上边一句话是一样的 相当于a.companyName// 对象访问或增加属性的方式有两种 对象.属性和对象[属性]var company = function() {}; //function也是对象
    company.get_name = function() { //所以可以对function也增加属性
    return “Microsoft”;
    }var company = function() {}; //既然function是对象 其自然也具有prototype属性 即原型
    company.prototype.get_name = function() { //这么写也就不足为奇了 楼主明白了么?
    return “Microsoft”;
    }
      

  2.   


    var company = function() {}; 
    company.prototype.get_name = function() { //比较去掉prototype后的效果
    return "Microsoft"
    }
    var x=new company();
    alert(x.get_name())
    alert(company.get_name())
    //至于第一个,两种是一样的,
      

  3.   

    更正一下2楼。。构造函数才有prototype..
      

  4.   

    a.companyName = "Microsoft";
    a["companyName"] = "Microsoft";
    这样写没有区别,a[]的用法主要是用在变量,比如:
    var str = "companyName";
    a.str = "Microsoft"; //这样写会报错
    a[str] = "Microsoft"; //一切正常,等同于a.companyName = "Microsoft";
                          //以及a["companyName"] = "Microsoft";
      

  5.   

    第二个问题是直接属性和原型属性的区别了,原型属性优先级低于直接属性,比如
         var company = function() {
         this.get_name = function() {
    return "Microsoft 1";
    }
    };

    company.prototype.get_name = function() {
    return "Microsoft 2";
    }
    var com = new company();
    alert(com.get_name());//结果为 Microsoft 1另外,类函数不能在外部增加直接属性,因为在外面定义的直接属性new无法识别
      

  6.   

    第一个问题还是有区别的,如果该属性名是个非法的变量名,比如 aa-bb等,那只能用 a["aa-bb"]的方式来用,a.aa-bb是个非法的式子,如果属性名是个合法的变量名,那[]和.是一样的。