(知识点)JavaScript原型和原型链
〇 每个函数都拥有prototype属性,而该属性所储存的就是原型对象
1)原型属性——

上面我们测试了foo()函数的
1) length属性(length属性除了可以用在数组中,还可以用于记录函数参数的数量)
2)来自原型的constructor property属性(该属性实际上是一个之指向用于创建该对象的构造器函数的引用),其引用就是Function()这个构造器函数
3)来自原型的prototype属性(每个函数的prototype属性都指向了一个对象,并且它只有在该函数是构造器时才会发挥作用,并且它创建的属性可以当做函数自身属性使用)
- 利用原型属性添加方法和属性
function Gadget(name,color){
this.name = name ;
this.color = color;
this.whatAreYou = function () {
return 'I am a' + this.color + '' + this.name;
} ;
}
Gadget.prototype.price = 100;
Gadget.prototype.rating= 3;
Gadget.prototype.getInfo = function () {
return 'Rating:' + this.rating +',price:' + this.price;
}
/*我们还可以避开这种逐一添加的繁琐*/
Gadget.prototype = {
price:100,
rating:... /*and so on...*/
}
- 使用原型的方法与属性
/*接下来,我们就可以直接用该构造器来新建对象了*/
var newtoy = new Gadget('赛车','白色');
newtoy.name; /*赛车*/
newtoy.color; /*白色*/
newtoy.whatAreYou() /*"I am a 赛车 白色"*/
newtoy.price; */
newtoy.rating; */
newtoy.getInfo(); /*Rating : 3, price:100*/
- 自身属性与原型属性
注意:
1)自身属性的优先级高于原型属性
也就是说,当我们使用对象的某个属性,它会先从对象自身查看,如果找到了,就不会在去原型中查看
2)这时如果我们仍然想得到原型中的该属性,我们可以使用 delete操作符(delete操作符,只会删除对象自身的属性,如:delete newtoy.name;)
3) 我们通过hasOwnprototype()方法来判断一个属性是来自自身属性还是原型属性
newtoy.hasOwnProperty('name'); /*true*/
- 枚举属性
var o = {x:1,y:2,z:3};
console.log('toString' in o); //true
console.log(o.propertyIsEnumerable('toString')) //false
var key;
for (key in o){
console.log(key); //x y z
}
var obj = Object.create(o); //指向a
obj.a = 4;
console.log('x' in o) //我们通过Object.create的JavaScript内置函数,把obj指向了对象o,此时o就是obj的原型
/*1)遍历对象和原型链上的属性*/
var key;
for (key in obj){
console.log(key); //a x y z
}
/*2)给for in 遍历一个条件(如果他是对象身上的属性则遍历:obj.hasOwnProperty(key))
让他只遍历这个对象上的属性,而不再遍历这个对象原型链上的属性。*/
var key;
for (key in obj){
if (obj.hasOwnProperty(key)){
console.log(key); //a
}
}
(知识点)JavaScript原型和原型链的更多相关文章
- 如何理解JavaScript的原型和原型链
在现在的业务开发中,应该很少人在写原生JavaScript了,大家都一股脑地扑在各个框架上.本来,这些框架对于业务和开发者来说是一种福音,减少了各种各样的开发痛点,但是带来的负面问题就是对于开发者来说 ...
- 十分钟读懂JavaScript原型和原型链
原型(prototype)这个词来自拉丁文的词proto,意谓“最初的”,意义是形式或模型.在JavaScript中,原型的探索也有很多有趣的地方,接下来跟随我的脚步去看看吧. 原型对象释义 每一个构 ...
- 详解Javascript中的原型与原型链
目录 知识点 参考资料 结束语 知识点 面向对象编程 我们熟悉的Java和C#里,面向对象的两个基本概念是类class和实例instance,而ES6以前的Javascript并没有设计class. ...
- 深入总结Javascript原型及原型链
本篇文章给大家详细分析了javascript原型及原型链的相关知识点以及用法分享,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. 我们创建的每个函数都有一个 prot ...
- 全面了解 Javascript Prototype Chain 原型链
原型链可以说是Javascript的核心特征之一,当然也是难点之一.学过其它面向对象的编程语言后再学习Javascript多少会感到有些迷惑.虽然Javascript也可以说是面向对象的语言,但是其实 ...
- JavaScript继承与原型链
对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了c ...
- 【javascript基础】4、原型与原型链
前言 荒废了好几天,在宿舍闷了几天了,一直想着回家放松,什么也没搞,论文就让老师催吧.不过,闲的没事干的感觉真是不好,还是看看书,写写博客吧,今天和大家说说函数的原型. 原型是什么 第一次看到这个的时 ...
- 【JavaScript】深入理解JavaScript之强大的原型和原型链
由于JavaScript是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链. AD: hasOwnProperty函数: hasOw ...
- Javascript 原型和原型链
先来了解一下Javascript中的原型:”原型也是一个对象,原型可以用来实现继承...“ 对于 原型,构造函数,以及实例之间的关系:“每个(构造)函数都有一个原型属性,原型对象都包含一个指向构造函数 ...
- javascript 原型 和 原型链
最近几天,好些新同事来问原型,原型链啥的.本身作为菜鸟的我好像也没有好好整理过这个,这里写写自己的理解. 原型 大家都知道,JavaScript 不包含传统的类继承模型,而是使用 prototype ...
随机推荐
- Visual Studio 2017正式版安装
Visual Studio号称宇宙第一IDE, 2017年3月7日强大的微软帝国时隔两年多终于发布新一代IDE Visual Studio 2017.支持的功能简直不能太多,详情移步:https:// ...
- Freemaker配置文件详解
classic_compatible=true ##如果变量为null,转化为空字符串,比如做比较的时候按照空字符做比较 whitespace_stripping=true ...
- SQL server 数据库(视图、事物、分离附加、备份还原))
ql Server系列:视图.事物.备份还原.分离附加 视图是数据库中的一种虚拟表,与真实的表一样,视图包含一系列带有名称的行和列数据.行和列数据用来自定义视图的查询所引用的表,并且在引用视图时动态 ...
- UWP--集合绑定数据
使用 ObservableCollection 列表控件主要是 ListBox.ListView.GridView 等. 为列表控件绑定数据不再是为 DataContext 属性赋值,应该使用列表 ...
- 使用git克隆指定分支的代码
今天想学习一下开源中国Android客户端的app源码,源码的Git地址:http://git.oschina.net/oschina/android-app,如下图所示: 由于Master主分支上没 ...
- VC++中解决“在查找预编译头使用时跳过”的方法
Visual C++ Concepts: Building a C/C++ ProgramCompiler Warning (level 1) C4627Error Message": sk ...
- django进阶-3
先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...
- Ubuntu 16.04系统下安装RapidSVN版本控制器及配置diff,editor,merge和exploer工具
在Window下我们使用TortoiseSVN(小乌龟),可以很方便地进行查看.比较.更新.提交.回滚等SVN版本控制操作. 在Linux下我们可以使用RapidSVN.RapidSVN是一款轻量级的 ...
- JD . 圆角矩形、权重层级、浮动撑开盒子及元素的默认间距、清除浮动、隐藏盒子、盒子的撑开与撑破、子盒子垂直居中|不占位置
---恢复内容开始--- 圆角矩形 border-radius:50% 40% 30% 33px: 像素.百分比.小数( 0.5 ) 左上.右上.右下.左下 权重: 标签 1 : 类选择器 ...
- angular替代Jquery,常用方法支持
1.angular.bind(self,fn.args); 切换作用域执行 2.angular.copy(source,[destination]); 拷贝和深度拷贝 3.angular.eq ...