当前位置:网站首页>ES6中的原型对象
ES6中的原型对象
2022-07-07 07:20:00 【小白啥时候能进阶成功】
1、原型链

对象的原型(__proto__)->Star原型对象;
Star原型对象的原型(__proto__)->Object原型对象;
Object原型对象的原型(__proto__)->null;
2、对象成员的查找规则
按照“原型链”查找;
先看对象上是否有该成员;如果对象成员没有,则去Star原型对象上查找;Star原型对象没有,去Object原型(null)上查找......,没有则返回undefined;
如果对象上有,原型对象上也有,则返回对象上的成员(就近原则);
3、原型对象this指向
原型对象中this的指向:谁调用原型对象中的函数,this就指向谁(实例对象);
4、扩展内置对象方法
<script type="text/javascript">
//原型对象的应用,扩展内置对象方法
console.log(Array.prototype);
Array.prototype.sum = function(){
var sum = 0;
for(var i=0;i<this.length;i++)
{
sum += this[i];
}
return sum;
}
//var arr = [1,2,3];
var arr1 = new Array(1,2,3);
console.log(arr.sum());//根据原型链进行查找
console.log(Array.prototype);
</script>运行结果:

数组和字符串内置对象不能给原型对象覆盖操作Array.prototype={},只能是Array.prototype.xx=function(){}方式。
5、call方法的作用
调用这个函数,并且修改函数运行时的this指向。
fun.call(thisArg,arg1,arg2,...)- thisArg:当前调用函数的this对象;
- arg1,arg2:参数;
<script type="text/javascript">
var o ={
name:'fang'
}
function fn(x,y){
console.log("this is call demo");
console.log(this);//this本来是指向window(window.fn())
console.log(x+y);
}
fn.call();//1、可以调用fn函数;
fn.call(o,2,3);//2、改变this指向,指向o这个对象
</script>运行结果:

6、利用构造函数继承父类的属性和方法
1、继承属性
通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。
<script type="text/javascript">
function Father(uname,age){
//this指向父类构造函数的对象实例
this.uname = uname;
this.age =age;
}
function Son(uname,age){
//this指向子类构造函数的对象实例
Father.call(this,uname,age);
}
var son1 = new Son('liming',25);
console.log(son1);
</script>运行结果:

2、继承方法
<script type="text/javascript">
function Father(uname,age){
//this指向父类构造函数的对象实例
this.uname = uname;
this.age =age;
}
Father.prototype.money = function()
{
console.log("make money");
}
function Son(uname,age){
//this指向子类构造函数的对象实例
Father.call(this,uname,age);
}
Son.prototype = new Father();//将子类的原型执行父类的实例对象
Son.prototype.constructor = Son;
Son.prototype.exam = function(){
console.log("exam :100");
}
var son1 = new Son('liming',25);
console.log(son1);
console.log(Father.prototype);
</script>运行结果:

7、遍历数组
1、forEach()
array.forEach(function(currentValue,index,arr))- CurrentValue:数组当前项的值
- index:数组当前项的索引
- arr:数组对象本身
<script type="text/javascript">
var arr =[1,2,3];
var sum =0;
arr.forEach(function(value,index,array){
sum+=value;
});
console.log("sum:"+sum);
</script>2、filter() 筛选数据
array.filter(function(currentValue,index,arr))- filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组。
- 它直接返回一个新数组。
- currentValue:数组当前项的值
- index:数组当前项的索引
- arr:数组对象本身
<script type="text/javascript">
var arr =[61,12,83];
var newArr = arr.filter(function(value,index,array){
return value >= 20;
});
console.log("newArr:"+newArr);
</script>运行结果:
![]()
3、forEach和some区别
var arr =['red','green','blue'];
arr.some(function(value,index,array){
if(value == 'green'){
console.log("find ");
return true;//在some里遇到return就会终止遍历,迭代效率更高。
}
console.log("value:"+value);
});8、字符串方法
trim()方法会从一个字符串的两端删除空白字符
str.trim()- trim()方法并不影响原字符串本身,它返回的是一个新的字符串。
<script type="text/javascript">
var str = ' liming ';
console.log('str:'+str);
var newStr = str.trim();
console.log("newStr:"+newStr);
</script>9、对象方法
Object.defineProperty()定义对象中新属性或修改原有属性。
Object.defineProperty(obj,prop,descriptor)- obj:必需。目标对象。
- prop:必需。需定义或修改的属性定义
- descriptor:必需。描述
descriptor定义:以对象形式{}书写
- value:设置属性的值,默认为undefined
- writalbe:值是否可以重写。true|false(默认是false)
- enumerable:目标属性是否可以被枚举。true|false(默认是false)
- configurable:目标属性是否可以被删除或是否可以再次修改特性ture|false(默认false)
<script type="text/javascript">
var obj ={
id:1,
name:'huawei',
price:1000
};
Object.defineProperty(obj,'id',{
value:2,
writable:false,
});
Object.defineProperty(obj,'address',{
value:'shandong china',
enumrable:false,
configurable:false,//address不允许被删除
});
console.log(Object.keys(obj));//找不到address
delete obj.address;
console.log(obj);//address不允许被删除
delete obj.name;
console.log(obj);//name允许被删除
</script>运行结果:

边栏推荐
- Bean 作⽤域和⽣命周期
- The applet realizes multi-level page switching back and forth, and supports sliding and clicking operations
- Arthas simple instructions
- Bit operation ==c language 2
- ViewPager2和VIewPager的區別以及ViewPager2實現輪播圖
- ES6中的函数进阶学习
- Main (argc, *argv[]) details
- The difference between viewpager2 and viewpager and the implementation of viewpager2 in the rotation chart
- There is a problem using Chinese characters in SQL. Who has encountered it? Such as value & lt; & gt;` None`
- 虚数j的物理意义
猜你喜欢

小程序弹出半角遮罩层

ORM模型--关联字段,抽象模型类

The new activity of "the arrival of twelve constellations and goddesses" was launched

视频化全链路智能上云?一文详解什么是阿里云视频云「智能媒体生产」

【学习笔记-李宏毅】GAN(生成对抗网络)全系列(一)

企业实战|复杂业务关系下的银行业运维指标体系建设

Delete a record in the table in pl/sql by mistake, and the recovery method

ES类和对象、原型

AI从感知走向智能认知

ORM--分组查询,聚合查询,查询集QuerySet对象特性
随机推荐
JS reverse tutorial second issue - Ape anthropology first question
C# 初始化程序时查看初始化到哪里了示例
C# Socke 服务器,客户端,UDP
请教个问题,我用sql-client起了个同步任务,从MySQL同步到ADB,历史数据有正常同步过去
CSDN salary increase technology - learn about the use of several common logic controllers of JMeter
【学习笔记-李宏毅】GAN(生成对抗网络)全系列(一)
Pit using BigDecimal
ORM--数据库增删改查操作逻辑
Basic chapter: take you through notes
有没有大佬帮忙看看这个报错,有啥排查思路,oracle cdc 2.2.1 flink 1.14.4
为什么安装mysql时starting service报错?(操作系统-windows)
大佬们,请问 MySQL-CDC 有什么办法将 upsert 消息转换为 append only 消
剑指 Offer II 107. 矩阵中的距离
thinkphp3.2信息泄露
Gauss elimination
Using keras in tensorflow to build convolutional neural network
Integer inversion
根据热门面试题分析Android事件分发机制(二)---事件冲突分析处理
The new activity of "the arrival of twelve constellations and goddesses" was launched
ES6中的函数进阶学习