javascript - JS prototype原型问题
大家讲道理
大家讲道理 2017-04-11 11:26:56
0
2
220
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__; //?有没有这种写法

大家讲道理
大家讲道理

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

全部回覆(2)
小葫芦

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

所有对象(除了非常特殊的一个,可不考虑)都有__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();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!