1

我在某处读到Object.__proto__Object.prototype指向相同的东西,这Object.prototype是标准方式,但昨晚我试图继承一个类,Object.prototype但它没有用,然后我试图弄清楚是否两者都Object.__proto__指向Object.prototype同一个东西。出乎我的意料

    alert(Object.__proto__===Object.prototype);

显示false在警报框中所以要弄清楚哪个有效,我编写了以下代码

    function Cx(){
    this.objName="i m X";
    this.prototype={ };
    this.prototype.getMyName=function (){
alert(this.objName);
       }
    this.__proto__={ };
    this.__proto__.hMyName=function(){
alert("I am hMyName");
      }
    }
    function InheritCx(){
//var y=new Cx();
this.objName="I am InheritCx";
this.__proto__=new Cx();

    }
    y= new InheritCx();
    y.hMyName();//displayes "I am hMyName" in alertbox when using chrome or mozilla
    y.getMyName();//displays an error in chrome and mozilla

两者有什么区别,为什么标准代码不起作用?此外,我有兴趣知道如何使原型继承在大多数浏览器(IE 6-8、9、10、chrome、firefox、mozilla、opera 和 webkit)中工作?

4

1 回答 1

3

.__proto__是获取给定对象继承的下一个对象的非标准方法。读取属性相当于标准Object.getPrototypeOf()

var o = {}; // new object

console.log(o.__proto__ === Object.getPrototypeOf(o)); // true

函数的.prototype属性是新对象将从作为构造函数调用该函数时创建的对象继承的对象(使用new

因此,如果我们获取一个函数,通过 using 将其作为构造函数调用new,然后获取新对象并请求它__proto__,它将与.prototype在构造函数的属性上找到的对象相同。

function Ctor() {
    // our constructor function
}

var o = new Ctor();

console.log(o.__proto__ === Ctor.prototype); // true
于 2013-05-05T05:25:44.447 回答