Discuss / JavaScript / 给自己留个简单的笔记。。

给自己留个简单的笔记。。

Topic source

木爵可

#1 Created at ... [Delete] [Delete and Lock User]

创建一个对象应该都要用到构造函数,假设这个函数是`F`,那么`new F()`就是该对象,而该对象的原型对象`new F().__proto__`应该就是构造函数F对应的原型对象`F.prototype`。对象用`__proto__`而函数用`prototype`感觉很好理解了就...

如果现在有两个函数`S`和`T`,让`T`和`S`的原型对象变成继承关系,利用空函数`F`进行桥接的话:

1.`new T()`的原型对象是`T.prototype`,`new S()`的原型对象是`S.prototype`,`new F()`的原型对象是`F.prototype`

2.让`T.prototype = new F()`,即让通过T构造出来的对象`nwe T()`的原型对象变成通过`F`构造出来的对象`new F()`(原型对象也是对象,感觉好像合理...)

3.让`F.prototype = S.prototype`, 即让`F`的原型对象变为`S`的原型对象,那么通过`F`构造出来的对象`new F()`的原型对象就变成了`S.prototype`,和`new S()`的原型对象相同。

4.此时,`new T()`的原型对象是`new F()`,`new F()`的原型对象是`S.prototype`,也就是`new T()`的原型对象是`T.prototype`,而`T.prototype`的原型对象是`S.prototype`,达到了继承的目的

通过函数`T`构造对象时,调用的应该是`T`对应的原型对象`T.prototype`的构造函数(即`T.prototype.constructor`)。如果没有桥接操作,那么函数`T`的原型对象的构造函数应该就是`T`(即`T.prototype.constructor = T`)。但是桥接操作后,`T.prototype`变成了`new F()`,所以需要给T对应的原型对象T.prototype指定构造函数,即T.prototype.constructor = T。类似的,如果想要实现我们自己的方法,就需要在T的函数原型中添加,即T.prototype.functionName = function (...) { ... }。


  • 1

Reply