高中生学什么技术好好呢?话说女怕嫁错郎、男怕入错行,选择比努力...
中专学什么技术发展好 学IT技术,做企业争抢紧缺人才! ...
电商
fun88体育东莞金码网络营销学院,是国内知名网络营销培训品牌,汇集行...
学什么技术有前途?学什么技术最好?
fun88体育金码学校是东莞电脑培训是东莞专业IT培训机构、东莞电脑培...
高中生学什么有好的发展? 道路千万条 技术第一条 技能强 文凭硬...
学it,技术牛到fun88体育 就业好到不让说,薪资高到没朋友
构造函数、实例和原型的概念和关系
每个函数都属于对象,都会有一个属性叫prototype。这个属性指向一个对象,我们把他叫做当前函数的原型对象。原型对象下面有个属性叫constructor.这个属性指向当前函数。函数又分为普通函数和构造函数。这里我们说一下构造函数:
定义一个函数 :
function Person(x, y ) {
this.age = x;
this.name = y;
}
var xiaoming= new Person(12, "xiaoming" );
这里创建实例对象 xiaoming的时候就是调用了Person构造函数,使xiaoming有了自己的属性和方法,之后xiaoming和Person也就没有什么直接交集了(可以理解为小明分手了,哎程序员好难╥..╥)
但是每个实例对象都会有一个隐藏属性[[prototype]],这个属性在chrome/firefox下叫__proto__,仅仅供学习调试用.它指向的就是构造函数的原型对象。
原型对象的深入理解
对于这个原型对象,我们就要重点理解下了。这个对象的作用就是为了让所有的实例对象都能共享这个对象的属性和方法(当然实例本身的属性和方法优先级是高于原型的)。每个构造函数都会有一个默认的原型对象。我们只要在改原型对象上做文章就可以实现很多功能。
● 共享属性和方法:
Person.prototype.eyes = 2;
Person.prototype.walk = function ( ){……};
var xiaoming= new Person(12, "xiaoming" );
var xiaohong= new Person(12, "xiaohong" );
xiaoming.eyes
xiaohong.eyes
// 小明和小红都有2只眼
xiaoming.walk
xiaohong.walk
//小明和小红都会走路
● 原型链:
我们先做一个假设,假如我们把一个函数对象Man的原型直接给换成另一个函数对象Person的实例对象xiaoming会怎么样呢?
前面说了,通过实例对象是可以找到函数对象Person的原型。那我们现在Man对象的实例xiaoming是不是也就可以访问到Person对象的原型对象了呢。
function Man( ) {
this.beard = "xxx";
}
Man.prototype = new Person( 23, "xiaoming" );
这里我们相当于把默认的那个原型给重写了,给参数其实就是给原型添加属性和方法
var xiaoming = new Man();
xiaoming.beard //xxx 这里实例xiaoming自己的属性(小明有胡子)
xiaoming.age //23
xiaoming.name //xiaoming 这两个属性是实例的原型上面的属性(其实这个属性是Person实例的属性,但是现在的原型不就是Person实例吗)
xiaoming.eyes //2 这个属性呢,是Person的原型对象上面的了
这里我们基本上都可以访问到,是不是有点继承的味道了。
如果我们再这样搞一个对象,也这么干,这里是不是就感觉像条链一样。最顶端的对象是Object,也就是说到最后了。我们把这条链接方式叫做原型链。这也是继承的依据。
继承
和传统的OOP语言来说,JavaScript语言比较蛋疼的是它没有类这个机制。所以说我们事先js的继承就从对象角度下手了。我们重点说一下依据原型链继承的。(其他的继承我就不说了,比如借用父对象的构造函数等,实用性不强)
1.上面所说的实现原型链的方法虽然有点继承的味道了,但是你有没有发现 实例化xiaoming这个对象的时候调用了Man这个构造函数,但是xiaoming自己的age和name都没能进行构造,只不过是原型上的属性而已(其实是Person自己构造的,new Person( 23, "xiaoming" ))。我们其实可以这样用call和apply这个object原型下面给我们定义好的方法改进下(call和apply方法自己看api说明吧)
function Man(x, y) {
Person.call(this, x, y); //这里你可以这样理解,this指的是Man,这样其实就是借用Person构造函数
this.beard = "xxx";
}
我们把Man的构造函数这样一改,实例化的时候传参,这样age和name这两个属性就是Man自己构造出来的了,并不会被共享
Man.prototype = new Person( );
Man.prototype.constructor = Man;
var xiaoming = new Man(23, "xiaoming");
这里只是让Man的原型的构造函数变成原有的构造函数,如果不加这一句的话,那么Man原型的构造函数就变成undefied,因为实例和构造函数并没有直接关系。这样一来,原型找不到构造函数,这是非常蛋疼的事情,违反了原型链的定义啊。
这边可能会有人问了,我为什么不自己像胡子beard 那个属性一样直接构造呢。
大哥,我这是举例子,你以为实际的项目中就会有这么两个属性吗。而且这样不正是继承的目的吗
可以少写很多代码啊。(说多了都是泪)
但是也是有缺点的:两次调用父类构造函数(第一次是在创建子类原型的时候,第二次是在子类构造函数内部);子类继承父类的属性,一组在子类实例上,一组在子类原型上(在子类原型上创建不必要的多余的属性,实例上的屏蔽原型上的同名属性,是不是感觉有点多余了 ,效率低。
2.为了改进这种方法,下面说的这种继承方式是借助我们伟大的道爷(这个人很厉害,自行百度)的灵感 。这种就是利用一个空函数对象来做一个桥梁.
具体实现方式如下:
function inherits(Child, Parent) {
var F = function () {};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
}
另外在子对象的构造函数中别忘了借用父对象的构造函数哦。(就是那个call或者apply方法)
这里和上面的区别是,子对象的原型现在不是父对象的实例了,变成了空函数对象的实例(父对象不用再创建两次了,并且子对象的原型上也不会有啥属性和方法了)。而空函数对象的原型变成了父对象的原型。前面我们说过,有了实例就能找到原型。所以现在子对象原型和父对象原型是就建立关系了。这种方式现在是最稳的方法,也已经被很多框架给写到源码里面了。
这里我们就用google closure 关于继承的两个api,这边简单举个例子:
Child = function( ){
goog.base(this);
this.height = 12;
}
goog.inherits(Child, Parent);
这里就实现了我们上述实现的,不过封装起来了而已。
人们为了改变现状,追求自己的幸福生活,越来越多的人都选择了拼搏。那么在拼搏的路上是否真能实现自己的目标,很关键的一步便在于最初的选择,那你需要有一技之长的技术,那么在这个社会,现在学什么技术工资高,就业不用愁呢?那肯定是 学一门好的电脑专业了,高薪资,好就业,前景广阔,提升空间大。要满足这些条件的技术工作,数IT行业最合了!
许多合作企业会根据用人需求和企业发展情况不定期到fun88体育东莞金码学校现场招聘IT专业人才,上千家合作企业遍布全国各地,学员根据自己的
项目实训招募啦~~fun88体育东莞金码学校合作企业、学术团队举行项目实训招募活动,让学员有机会根据自己的喜好选择项目实训,参与项目的开发。
fun88体育东莞金码组织学员进行各种户外拓展、郊游、烧烤等集体活动,让学员们充分感受集体生活的温暖和团队的力量。
2017年1月12日,嘉华教育集团在深圳南山文体中心隆重举办了11周年庆典。出席本次庆典的嘉宾有原外交部副部长胡恩才先生、原深圳大学校长
根据前程无忧的统计数据,截至2013年5月31日,前程无忧的网上发布职位数中面向应届生人群开放的职位数超过11万个,占招聘职位总数的4 25%,
现在越来越多的企业采取小组面试(Panel Interview)。似乎这种面试的形式逐渐成为一种流行的趋势。不仅是初级员工,包括很多高级人才和职业
面试官类型不同,到底都有哪些种类呢?跟着来看看吧。一、呆板稚嫩型这类面试官一般出现在面试的第一轮,他们由于缺乏面试经验,大多数情况
翻遍诸多面试攻略,一般都有这么一条金科玉律:面试一开始不能询问薪水,作为卖方市场的求职者,每次面试时我们都会谨慎言行。明明是正大光
说到面试,大家最关心的,想必是怎样才能从容应对面试官的提问了。虽然,我们在面试经验分享的文章中常能看到求职者要学会包装自己并向面试
有了这些法宝,妈妈以后再也不用担心我加班了~一、产品狗、运营猫的数据处理中心1 infogr am infogr am是一个强大的数据可视化图表创作
本篇文章将记录如何编写一个最简单的WebPart的最后一部分,即添加WebPart,包括把WebPart添加到网站的WebParts列表中,及把WebPart添加到AS
1 splice(start,[,length,newValue ])对数组中某索引范围进行删除 声明数组对象var myArray = ["a", "b", "c", "d", "e"]; 从数
随着移动互联网技术的不断发展,移动互联网用户发送和上传的数据量达到1 3exabytes,相当于10的18方。BigData大数据是继云计算、物联网之后
现在,在各种营销手段都百家争鸣、百花齐放的时代,电子邮件营销几乎一夜之间便显得逊色了许多。然而,令许多企业和厂商纠结不已的是,电子邮件营销虽然已经“人老珠黄”,
初中生无学历无技能,不进工厂上班还可以做什么呢?这是很多低学历人群想要提升自己,却又找到出路的迷茫问题。难道初中生就只有在工厂干体
2015年是嘉华职业教育集团十周年,为了营造浓厚的校园文化艺术氛围,提供给学生一个展示自我、彰显个性的舞台,带动更多学子走进IT职业领域
6月22日下午,青鸟学社全体成员参与了由学习部举办的第二期学习经验交流会,怀着激动的心情,同学们坐等着交流会的开始!随着激动人心的曲子
01岗位了解所谓的工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员。网络工程师能够从事计算机信息系统的设计、建
春节、元宵节是我国民间最重要的传统节日,是我国人民庆贺丰收、祈福风调雨顺、家人团聚的日子。而猜灯谜、吃汤圆则是元宵佳节必不可少的活
在这个大学生很普遍的时代,文凭的重要性也显而易见的不如过去,因为随着社会对人才需求的转型,很多企业都把技能和经验作为聘用人才的标准
在这个大学生遍地皆是的时代,即便拥有大学文凭,也难以找到如意的工作,要在社会上立足,也是一种挑战。对于高中生来说,没有学历优势,如果还没技能的话,要在社会站稳脚跟,那更是难上加难,那么高中毕业究竟可以做什么呢?
因为各种原因不着急找工作,被媒体解读为慢就业这一现象正在高校毕业生中悄然兴起。据企鹅发布的一份毕业季大数据报告,52%的95后毕业大学
正值阳光三月,春光明媚,对于大部分人来说,2018新的旅程才刚刚开始。回想过去的2017,又累又不赚钱的工作,难以满足当今社会的物质需求,总想找一份赚钱多又有前景的职业,提高自己的生活品质,让家人过上更好的生活。
根据一封发给供应商的信件,微软计划重新命名Nokia Oyj为Microsoft Mobile Oy。新的子公司将成为微软公司的移动设备部门。信中的内