javascript - JS prototype原型问题
大家讲道理
大家讲道理 2017-04-11 11:26:56
0
2
225
var a = { test : function () { } } function b() { // b 构造函数 this.j=3; } var t = new b(); //T实例 b.prototype ; // b 的原型对象 b.__proto__; //?有没有这种写法 t.__proto__; //?有没有这种写法 t.prototype; //?有没有这种写法 a.prototype; //?有没有这种写法 a.__proto__; //?有没有这种写法

想问一下什么时候用prototype 然后b.__proto__; //?有没有这种写法
t.__proto__; //?有没有这种写法
t.prototype; //?有没有这种写法
a.prototype; //?有没有这种写法
a.__proto__; //?有没有这种写法

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen (2)
刘奇

初始状态只有函数有prototype.
实例的__proto__指向其构造函数的prototype.
函数也有__proto__因为函数是Function函数构造函数的实例。

    小葫芦

    除去自行添加的情况。。。。

    所有对象(除了非常特殊的一个,可不考虑)都有__proto__属性,只有函数才具有prototype属性。
    所以只有t.prototypea.prototype是没有的。其他都是有的。

    function b() {}; var t = new b();

    这样的代码,可以看作是b是类,tb类的一个实例。
    比如

    // class Object() {} var obj = new Object(); var obj2 = new Object();

    这样objObject类的一个实例。在面向对象的编程中,一些具有共性的对象叫做一个类,因此这些对象有一些相同的方法。所以可以在定义类的时候定义这些具有共性的方法,某种类的实例可以直接访问调用些方法。比如obj.toString(); obj2.toSTring()。显然如果是obj.toString = function(){}这样定义,是不好的。

    JS中给出的方案是,在类(e.g.Object)中定义一个prototype属性,然后在类的实例中定义一个__proto__属性。类的方法定义在prototype,在创建实例的时候__proto__赋值为这个值。(e.g.obj.__proto__ = Object.prototype)。 当写下obj.toString()的时候,解释器就可以通过obj.__proto__.toString访问到在类Object.prototype中定义的方法。实现了类中方法的共享。所以下面的代码是可以的。

    Object.prototype.myToString = function(){ return "A Object";} obj.myToString(); // "A Object" obj2.myToString();

    上述所说的类(e.g.Ojbect)在JS里面和函数合二为一了。所有对象都有__proto__属性,只有函数才有prototype属性。

    继承,以及存在的问题。。。略

    JS里的一些语法糖(简写);

    var obj = {}; //等价与 var obj = new Object(); function fn() {}; var fn = new Function();
      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!