【Web】Javascript基础之原型链
来源:互联网 发布:淘宝达人推广费多少钱 编辑:程序博客网 时间:2024/05/02 06:12
一.prototype
一般函数会预设prototype属性,这个属性是一个对象。
function Foo(){ this.y=2}typeof Foo.prototype;//objectFoo.protype.x=1var obj3=new Foo();//创建一个实例,函数作为构造器使用,this将指向一个对象,对象的原型将指向构造器的prototype属性。obj3.y;//2obj3.x;//1
Foo.prototype对象内部结构 { constructor:Foo, __proto__:Object.prototype, //原型,指向object.prototype,因此object的方法才能被拿来直接使用 x:1 }
二.prototype与原型的不同
函数的prototype对象属性的作用是当使用new方法构造实例的时候,构造器的prototype属性会用作new出来的对象的原型。prototype是函数中预设的对象属性,而原型是对象上的原型。
三.原型链实现继承
function Person(name,age){this.name=name;this.age=age;//通过new创建对象时,this指向原型为Person.prototype的空对象,然后通过this.name来给其赋值。Person.prototype.hi=function(){ console.log("hi"+this.name)}//通过这种方式创建所有实例共享的方法。function Student(name,age,className){ Person.call(this,name,age); this.className=className;}Student.prototype=Object.create(Person.prototype);//创建一个空对象,该对象的原型指向它的参数。不能用Student.prototype=Object.prototype的原因:当我们想增加一些student自己的变量会出错。Student.prototype.constructor=Student;//不设置的话,constructor会指向person}
同名方法,Student方法会覆盖Person方法。
四.动态改变prototype
Student.prototype.x=101//当动态的添加一个x的属性,所有已经创建的对象中都会新增一个x属性。Student.prototype={y:2};//直接修改,赋值为一个新对象,赋值后,结果如下:bosn.y;//undefinedbosn.x;//101//已经实例化的bosn并不会被影响。var nunnly=new Student("Nunnly");nunnly.x;//undefinednummly.y;//2//新创建的对象会受到影响。
五.instanceof
[1,2]instanceof Array===true//左侧要求是一个对象,右侧要求是一个函数。该函数将会判断右侧的prototype属性是否出现在左边对象的原型链上。
不同的window或者iframe间的对象检测不能使用instanceof
0 0
- 【Web】Javascript基础之原型链
- JavaScript基础之继承与原型链
- JavaScript基础--原型链
- 【javascript基础】原型与原型链
- Web基础之Javascript
- Web之Javascript基础
- javascript基础之八(原型揭秘)
- javascript之原型和原型链
- JavaScript---继承之原型链
- Javascript基础(三)原型和原型链
- JavaScript原型,原型链
- JavaScript-原型、原型链
- JavaScript原型,原型链
- JavaScript-原型、原型链
- Web基础之Javascript 进阶
- Web基础之初识JavaScript
- Web基础之JavaScript实战
- 【web前端-理解js原型】理解Javascript中的原型对象、原型链和继承
- order by
- 初学最长上升子序列心得
- Android Fragment使用
- 最短路径问题
- Windows无法访问虚拟机Linux下的TomCat的解决方法
- 【Web】Javascript基础之原型链
- Android Listview数据显示
- 动态规划:最大上升子序列和
- python基于文件操作
- c实现的算法
- 程序的本质复杂性和元语言抽象
- 对象
- lightoj-1029-Civil and Evil Engineer(最小生成树+克鲁斯卡尔算法)
- js 和ajax 提交给服务器端的代码, 验证输入值符不符合,验证服务器传递过来的值 thinkphp