JavaScript 原型与原型链,以及类的继承 心得总结

一.实例对象之间的关联

通过一个构造函数(包括类)创建的实例,在构造函数内定义的属性和方法都会在每一个实例对象内访问到,但是每一个实例上的属性和方法都是独立不相等的。

二.原型上的属性变化

通过构造函数创建的所有实例的原型都为这个函数的prototype,同时这个构造函数的founction.prototype.constructor又指向founction, 关键:一旦修改founction.prototype内的属性,所有的实例上都会访问到

在这个例子中, Person.prototype 被设置为等于一个通过对象字面量创建的新对象。最终结果
是一样的,只有一个问题:这样重写之后, Person.prototype constructor 属性就不指向 Person
了。在创建函数时,也会创建它的 prototype 对象,同时会自动给这个原型的 constructor 属性赋
值。而上面的写法完全重写了默认的 prototype 对象,因此其 constructor 属性也指向了完全不同
的新对象( Object 构造函数),不再指向原来的构造函数。虽然 instanceof 操作符还能可靠地返回
值,但我们不能再依靠 constructor 属性来识别类型了
这里, instanceof 仍然对 Object Person 都返回 true 。但 constructor 属性现在等于 Object
而不是 Person 了。如果 constructor 的值很重要,则可以像下面这样在重写原型对象时专门设置一
下它的值:

三.类构造函数

        使用 new 操作符实例化 Person 的操作等于使用 new 调用其构造函数。唯一可感知的不同之处就 是,JavaScript 解释器知道使用 new 和类意味着应该使用 constructor 函数进行实例化。
使用 new 调用类的构造函数会执行如下操作。
(1) 在内存中创建一个新对象。
(2) 这个新对象内部的 [[Prototype]] 指针被赋值为构造函数的 prototype 属性。
(3) 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。
(4) 执行构造函数内部的代码(给新对象添加属性)。
(5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。
        默认情况下,类构造函数会在执行之后返回 this 对象。构造函数返回的对象会被用作实例化的对 象,如果没有什么引用新创建的 this 对象,那么这个对象会被销毁。不过,如果返回的不是 this 对 象,而是其他对象,那么这个对象不会通过 instanceof 操作符检测出跟类有关联,因为这个对象的原型指针并没有被修改。

四.原型方法与访问器

为了在实例间共享方法,类定义语法把在类块中定义的方法作为原型方法。
静态类成员在类定义中使用 static 关键字作为前缀。在静态成员中, this 引用类自身。其他所
有约定跟原型成员一样:

五.类的继承

派生类的方法可以通过 super 关键字引用它们的原型。这个关键字只能在派生类中使用,而且仅
限于类构造函数、实例方法和静态方法内部。在类构造函数中使用 super 可以调用父类构造函数。
在静态方法中可以通过 super 调用继承的类上定义的静态方法:
在类构造函数中,不能在调用 super()之前引用 this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值