js动态特性『遇上』原型
author:一佰互联 2019-03-26   click:216

简介:我们聊过js的动态特性。在js中我们可以随意的改变一个变量的指向,改变变量指向的类型。也就是说我们可以给一个变量赋值成一个对象,我们改变成另一个对象。像下面这样的:var a = { x:"x", y:, z:function(){ c ...

js动态特性『遇上』原型


我们聊过js的动态特性。在js中我们可以随意的改变一个变量的指向,改变变量指向的类型。也就是说我们可以给一个变量赋值成一个对象,我们改变成另一个对象。像下面这样的:
var a = { x:"x", y:[1,2,3], z:function(){ console.log("z") }}a = { _x:"_x", _y:[-1,-2,-3], _z:function(){ console.log("_z") }}console.log(a)

我们发现后面的赋值会覆盖前面的赋值。

在前面我们说过js的原型其实就是一个对象,即原型对象。那么当我们利用js的动态特性随意的修改原型对象,会发生什么呢。看代码:
function Test(x){ this.x = x;}var t = new Test("x");/** * 我们在Test.prototype添加一条属性 */Test.prototype.getX = function(){ return this.x;}/** * 返回"x" */console.log(t.getX());/** * 我们把一个新的对象赋值给Testprototype */Test.prototype ={ constructor:Test, getY:function(){ return "y" }}var t1 = new Test("a");console.log(t.getX());//"x"console.log(t1.getY());//"y"console.log(t1.getX());//errorconsole.log(t.getY());//error

在上面的代码种我们首先定义了一个构造函数Test并创建一个Test类的实例t,然后再构造函数的原型种添加了一个方法,我们可以通过实例t访问原型上新增的方法。说明我们函数的原型对象是在函数创建的时候就存在的,她指向一个对象,并不需要我们特别的声明。

如果我们给Test类的原型重新赋值一个对象。并创建一个新的Test实例t1,这个t1实例的原型指向Test类的新的原型对象,而实例的原型仍指向原来的原型对象。

我们可以用js引用类型的思想去理解原型的动态特性。当一个类的实例创建的时候,这个实例就指向一个引用类型,这个引用类型有自己的原型和原型链也指向特定的对象,不会改变。不管这个类的原型对象是否改变


本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yinxi.net学习互联网营销技术请到巅云建站www.yx10011.com。