摘要:构造函数属性名属性值,方法名自由属性和原型属性自由属性通过对象的引用添加的属性。属性上述代码说明对象存在一个指向构造函数的原型,这个链接被叫做属性只能在调式时使用。
原型
原型是声明
在JavaScript中, 函数时一个包含属性和方法的Function类型的对象。而原型(Prototype)就是Function类型对象的一个属性。在函数定义是就包含了protopype属性,它的出事值时一个空对像。在JavaScript中并没有定义函数的圆形类型,所以原型可以时任何类型。 原型时用于保护对象的共享属性和方法的,原型的属性和方法并不会影响函数本身的属性和方法。
function foo (a,b){
return a+b;
}
console.log (typeof foo.prototyoe);//boject
获取原型
通过如下两种方式可以获取对象的原型,从而设置共享的属性和方法:
通过构造函数的prototype属性
function person(){
console.log ("person instantiated");
}
console.log(person.prototype);
通过Object对象的getPrototypeOf(obj)方法。
function Person(){
console.log (person instantiated);
}
console.log(Object.getprototypeOf(person));
原型的属性和方法
通过如下两种方式可以设置原型的属性和方法。
构造函数.Prototype.属性名+属性值;
构造函数.prototype.方法名=function(){}
直接为原型定义一个新对象。
构造函数.prototype={
属性名:属性值,
方法名:function(){}
}
自由属性和原型属性
自由属性: 通过对象的引用添加的属性。其他对象可能无此属性:即使有,也是彼此独立的属性。
原型属性:从原型属性对象中继承来的属性,一旦原型属性中属性改变,所有继承原型属性对象属性均改变。
function Emo(ename,salary){
this.ename=ename;
this.salary=salary;
}
Emp.prototype={city:北京市,dept:研发部}
var emp1 =new Emp("Mary",3800);
var emp2 =new Emp("tmp",3000);
检测自由或原有属性
使用hasOwnPrototype()方法检测对象时否具有指定的自有属性:
function Hero(){}
var hero = new Hero()
console.log(hero.hasOwnPrototype("name"));
使用in关键字检测对象及其原型链中是否具有指定的属性:
function Hero(){}
var hero=new Hero();
console.;log("name"in hero);
扩展属性或方法
通过原型看为指定构造函数或对象扩展其属性或方法,如下代码实例:
function Hero (){}
Hero.protoptype={
name:"Mary",
salary:3800}
var hero =new Hero();
console.log (hero.name);//mary
重写原型属性
通过构造函数或对象的自由属性可以重写原型的属性, 如下代码示例:
function Hero(){}
Hero.prototype={
name:"Mary",
salary:3800
}
var hero = new Hero();
hero.name="tom";
console.log(hero,name);//tom
删除属性
通过delete关键词可以删除对象的属性,如果该对象即具有原型属性又具有既有属性的话, 先删除自由属性,在删除原型属性。如下代码示例:
function Hero(){}
Hero.prototype= {name:"Mary",salary:3800}
var hero =new Hero();
hero.name ="Tom";
delete hero.name;//删除Tom
console.log(hero.name);//mary
delete hero.name;//删除Mary
console.log(hero.name);//undefind
isprototypeOf()方法
每一个对象都会具有一个isPrototypeOf()方法,该方法用来判断一个对象是否时另一个对象的原型。
var monkey= {}
function Human(){}
Human.prototype= monkey;
var man = new Human();
monkey.isPrototypeOf(man);//true
__proto__属性
function Hero (){}
Hero.prototype={
name:"mary",
salay:3800
}
var hero =new Hero();
console.log(hero.name);//maey
上述代码说明hero 对象存在一个指向构造函数Hero的原型,这个链接被叫做————proto————属性只能在调式时使用。
————proto————属性时指定对象的属性。
prototype属性时指定构造函数的属性
扩展内建对象
JavaScript中的内置对象有些具有prototype属性,利用内置对象prototype属性可以为内置对象扩展属性或方法。通过原型属性扩展内置对象的属性和方法非常灵活,根据个性化要求制定JavaScript语言的具体内容。一般建议慎用这种方式,如果JavaScript的版本更新时可能会提供个性化属性或方法,导致冲突。
Array.prototype.inArray =fuction (color){
if (this)[i]===color {return true;}
}
return false;
}
var a =["red","green","blue"];
console.log (a.inArray("red"));//true
console.log(a.inArray("yellow"));//false
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108261.html
摘要:先来一个构造函数构造一个人类实例化一个对象看看的名字是什么打印结果先说一个前提只要是函数,就会有一个属性,可以理解为子代的原型遗传基因只要是对象,就会有一个方法,可以理解为向上寻找原型的方法。 关于javascript中的原型和原型链 我GitHub上的菜鸟仓库地址: 点击跳转查看其他相关文章 文章在我的博客上的地址: 点击跳转 关于javascript中的原型和原...
摘要:三组合继承结合原型链方式和借用构造函数方式的有点,进行改进的一种继承方式。四寄生组合式继承为了解决组合继承中子构造函数的原型链出现冗余的属性和方法,引入的一种继承方式。 说在前面:为了使代码更为简洁方便理解, 本文中的代码均将非核心实现部分的代码移出。 一、原型链方式关于原型链,可点击《深入浅出,JS原型链的工作原理》,本文不再重复叙述。 思路:让子构造函数的原型等于父构造函数的实例...
摘要:忍者级别的函数操作对于什么是匿名函数,这里就不做过多介绍了。我们需要知道的是,对于而言,匿名函数是一个很重要且具有逻辑性的特性。通常,匿名函数的使用情况是创建一个供以后使用的函数。 JS 中的递归 递归, 递归基础, 斐波那契数列, 使用递归方式深拷贝, 自定义事件添加 这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果...
摘要:然而,临近规范发布时,有建议提及未来的版本号切换为编年制,比如用同来指代在年末前被定稿的所有版本。总得来说就是版本号不再那么重要了,开始变得更像一个万古长青的活标准。 你不知道的JS(下卷)ES6与之未来 第一章:ES的今与明 在你想深入这本书之前,你应该对(在读此书时)JavaScript的最近标准掌握熟练,也就是ES5(专业来说是ES 5.1)。在此,我们决定全方面地谈论关于将近的...
阅读 3130·2021-11-22 13:54
阅读 3394·2021-11-15 11:37
阅读 3578·2021-10-14 09:43
阅读 3465·2021-09-09 11:52
阅读 3544·2019-08-30 15:53
阅读 2426·2019-08-30 13:50
阅读 2037·2019-08-30 11:07
阅读 855·2019-08-29 16:32