介绍
明天给大家讲讲Javascript中原型和继承的关系。 很多人可能对此还不是很了解。 为了让大家更好的理解,小编为大家总结了以下内容。 我希望你能从这篇文章中学到一些东西。 报酬。
一般来说,Javascript中的对象是一个指向原型的指针和它自己的属性列表。 JavaScript 在创建对象时使用写时复制的概念。
只有构造函数才具有强大的原型属性。 原型链继承就是创建一个新的指针javascript原型继承,指向构造函数的原型属性。
原型属性之所以特殊,是因为Javascript读取属性时的遍历机制。 本质上它只是一个普通的表针。
构造函数包括:
2.1. 对象字段函数
3.
4.日期
5.字符串
下面我们举一些例子
//每个函数都有一个默认的属性原型,而这个构造函数原型的默认指向这个函数//注意Person.constructor 不等于,Person.prototype.constructor只函数实例自带构造函数属性 functionPerson(名字){ this.name =,名称; }; Person.prototype.getName =function () { returnthis.name; }; var p =newPerson (“ZhangSan"); console.log (Person.prototype.constructor===人);//,真的 console.log (p.constructor===人);//,true ,这是因为p本身不包含构造函数属性,所以这里其实调用的是Person.prototype.constructor
我们的目的是表达
1.表明人类遗传自植物
2.证明p2是一个人的实例
我们把原型属性的方向改变一下,这样人就可以获得植物中属的原型,即人继承于植物(人是野兽),
functionPerson(名字){ this.name =,名称; }; Person.prototype.getName =function () { returnthis.name; }; var p1 =newPerson (“ZhangSan"); console.log (p.constructor===人);//,真的 console.log (Person.prototype.constructor===人);//,真的 functionAnimal () {} Person.prototype =newAnimal();//之所以不采用Person.prototype =, Animal.prototype,是因为new 还有其他功能,最后总结。 var p2 =newPerson (“ZhangSan");//(p2 →, Person.prototype →, Animal.prototype,,所以p2.constructor其实就是Animal.prototype.constructor) console.log (p2.constructor===人);//,输出为false ,但我们的本意是要这里为真实的,表明p2是人的实例。此时目的1达到了,目的2没达到。
但如果我们修改
Person.prototype =, new 动物(); 时间=Person.prototype.constructor 人;
这时候p2.consturctor就对了,指向一个人,说明p2是一个人的实例,新的问题又出现了。 此时目标2达到了javascript原型继承,但是目标1没有达到。
目的1和目的2此时是相互矛盾的,因为原型此时表达了两种矛盾的含义,
1.表明父类是谁
2.复制为您自己实例的原型
为此,我们不能直接使用prototype属性来表明父类是谁,而是使用getPrototypeOf()方法来知道父类是谁
Person.prototype =newAnimal (); Person.prototype.constructor=人; var p2 =newPerson (“ZhangSan"); p2.constructor//显示,function 人(),{} Object.getPrototypeOf (Person.prototype) .constructor//显示,function 动物(),{}
这区分了这两个概念。 虽然通过使用hasOwnProperty()方法,什么时候访问实例属性和什么时候访问原型属性是很清楚的。
你最近做了什么?
当代码varp=new()执行时,new做了以下事情:
创建一个空白对象
创建指向 Person.prototype 的指针
通过this关键字将此对象传递给构造函数并执行构造函数。
具体来说,在下面的代码中,
人物.原型。 获取名称=函数(){}
如果我们通过
var person =newPerson (); 其实类似于 var person =newObject (); person.getName =Person.prototype.getName;
为此目的调用 person.getName() 时,this 指向新创建的对象,而不是原型对象。
当向现有功能添加新功能时,这似乎很有用。 我们可以像这样扩展现有的方法:
//functionmyFunc的写法基本等于,varmyFunc=,new function(); functionmyFunc(){}myFunc=function (function){//你可以在这里做点别的事 returnfunction(){//你可以在这里做点别的事 returnfunc.apply(parameter);}}(myFunc) 之间有什么关系Javascript 中的原型和继承
发表评论