登录  /  注册
首页 > web前端 > js教程 > 正文

深入了解Javascript对象原型

青灯夜游
发布: 2019-11-27 18:19:42
转载
2192人浏览过

javascript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。

深入了解Javascript对象原型

原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

【相关课程推荐:JavaScript视频教程

对象原型Prototype

1、方法过载

创建一个小猫构造函数,代码如下:

function Cat(name,color){
this.name = name;
this.color = color;
 
this.run=function(){
    alert(“一只”+this.color +”的小猫飞奔过来...”);
}
this.eat=function(){
    alert(this.name +”要吃鱼”);
}
}
 
var cat1 = new Cat();
登录后复制

以上所有用this定义方法,this代表新的实例,都会在创建新实例时为其创建一个方法副本。

是不是有点多余,怎么解决 ??

分析:每一个类型都拥有的特性,每次在实例级别定义确实有点浪费,那么如果能在类级别定义,每一个实例自动拥有类的通用特征就好了。在这里我们就要用到prototype。

2、原型的使用

2.1、 原型属性

在JavaScript中,函数本身也是一个包含了“方法”和“属性”的对象。比如之前学了一些方法(如constructor())及属性(如name和length)等等。

现在来介绍一个新的属性--原型Prototype。

我们创建的每个函数都有一个 prototype(原型)属性,他指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。

// 定义一个构造器
function Person(name,age){
}
// 函数的形参个数
console.debug(Person.length)// ==>2
// 构造函数
console.debug(Person.constructor)// ==> Function()
// 原型类型
console.debug(typeof Person.prototype)// ==>object
// 原型内容
console.debug(Person.prototype)// ↓↓
登录后复制

每一个类(构造函数)都具有一个prototype属性,当创建这个类的实例对象原型对象的所有属性都被立即赋予要创建的对象中。

2.2、原型操作

设值:

构造函数.原型.属性=属性值
构造函数.原型.方法=函数
登录后复制

取值:

对象.属性
对象.方法()
登录后复制

 2.3、属性访问的优先级

原生属性的优先级高于原型属性。遵循从上到下查找:

1.png

2.4、神秘的__proto__属性

访问对象上面的属性,直接通过object.name访问。

神奇的user.__proto__属性,该属性其实就是对应User类的prototype属性。

console.debug(user.__proto__===User.prototyp);//==> true;

 _proto_属性属于对象实例,prototype属性类的属性。

每个对象在创建后,都会自动建立一个到prototype上的引用,让对象具备类型原型的所有特征。

 一个对象中的__proto__(prototype)属性中的成员,可以直接通过object.成员进行访问。

总结:

每个类都有独立的prototype属性,向prototype对象上面添加属性,对象实例可以共享prototype对象上面的属性,如果对象本身已存在某个属性,使用对象本身上面的属性,如果没有则使用prototype上面的属性,如果是添加属性添加到对象上面,不影响对象的原型对象。

本文来自 js教程 栏目,欢迎学习!

以上就是深入了解Javascript对象原型的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号