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__; //?有没有这种写法
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
初始状态只有函数有prototype.
实例的__proto__指向其构造函数的prototype.
函数也有__proto__因为函数是Function函数构造函数的实例。
除去自行添加的情况。。。。
所有对象(除了非常特殊的一个,可不考虑)都有
__proto__属性,只有函数才具有prototype属性。所以只有
t.prototype和a.prototype是没有的。其他都是有的。这样的代码,可以看作是
b是类,t是b类的一个实例。比如
这样
obj是Object类的一个实例。在面向对象的编程中,一些具有共性的对象叫做一个类,因此这些对象有一些相同的方法。所以可以在定义类的时候定义这些具有共性的方法,某种类的实例可以直接访问调用些方法。比如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中定义的方法。实现了类中方法的共享。所以下面的代码是可以的。上述所说的类(e.g.
Ojbect)在JS里面和函数合二为一了。所有对象都有__proto__属性,只有函数才有prototype属性。继承,以及存在的问题。。。略
JS里的一些语法糖(简写);