如题,
比如说这两个东东:
Array.isArray() // Array.prototype.isArray() 这样就是错的
Array.prototype.map // Array.map 错的,没有这个属性
我们知道js对象中总会有个prototype的东东,利用它可以进行原型的继承等等一些高级操作。
可是问题来了,
1、除了使用prototype来为对象动态设置属性&方法外,啥时候用prototype呢?
2、使用prototype和不使用prototype有什么区别呢?
举个例子:
function People() {}
var p = new People();
p.name = 'Tom';
p // People {name: 'Tom'}
// p.prototype.age = 7; // 错误
People.prototype.age = 7;
p // People {name: 'Tom'} // 木有age这个显式的属性,被加在__proto__中
p.age // 7
// p.prototype.age // 错误
People.prototype.age // 7
prototype
这个属性只有函数对象才有,具体的说就是构造函数具有.只要你声明定义了一个函数对象,这个prototype
就会存在对象实例是没有这个属性,
__proto__
是JS实现的自有属性,赋予对象实例的,通过__proto__
这个属性指向这个对象实例的原型对象,这要通过new操作符构建的对象都有这个属性__proto__
prototype
属性指向一个对象当对一个对象的某个属性执行赋值操作的时候,
如果这个属性在当前对象上不存在的话,但在原型对象上存在且是只读的,那么这个赋值操作无效;
如果这个属性在当前对象上不存在的话,但在原型对象上存在非只读,不过有set属性,那么属性不会添加到对象上,会调用set方法;
否则就会在对象上添加这个属性
当从一个对象上读取某个属性值,将从当前对象属性开始沿着原型链查找这个这个属性,如果到Object.prototype还是没有这个属性,那么返回undefined
除了你定义一个对象(类)时需要到prototype,其它情况一般不会对prototype直接操作