当前位置:网站首页>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>
运行结果:
边栏推荐
- C# 初始化程序时查看初始化到哪里了示例
- Horizontal split of database
- conda离线创建虚拟环境
- ORM--分组查询,聚合查询,查询集QuerySet对象特性
- Write it into the SR table in the way of flinksql. It is found that the data to be deleted has not been deleted. Refer to the document https://do
- 20排位赛3
- thinkphp3.2信息泄露
- request对象对请求体,请求头参数的解析
- 能源路由器入门必读:面向能源互联网的架构和功能
- 剑指 Offer II 107. 矩阵中的距离
猜你喜欢
Official media attention! The list of top 100 domestic digital collection platforms was released, and the industry accelerated the healthy development of compliance
AI从感知走向智能认知
Pytest learning - dayone
Arcgis操作: 批量修改属性表
Natapp intranet penetration
Use 3 in data modeling σ Eliminate outliers for data cleaning
Detailed explanation of diffusion model
【ORM框架】
小程序实现页面多级来回切换支持滑动和点击操作
官媒关注!国内数字藏品平台百强榜发布,行业加速合规健康发展
随机推荐
How to become a senior digital IC Design Engineer (5-3) theory: ULP low power design technology (Part 2)
高斯消元
Agile course training
Future development blueprint of agriculture and animal husbandry -- vertical agriculture + artificial meat
CSDN salary increase technology - learn about the use of several common logic controllers of JMeter
能源路由器入门必读:面向能源互联网的架构和功能
C# XML的应用
[untitled]
虚数j的物理意义
The combination of over clause and aggregate function in SQL Server
网上可以开炒股账户吗安全吗
ORM--查询类型,关联查询
HCIP 第一天 笔记整理
C# Socke 服务器,客户端,UDP
flink. CDC sqlserver. 可以再次写入sqlserver中么 有连接器的 dem
Scratch crawler mysql, Django, etc
根据热门面试题分析Android事件分发机制(一)
There is a problem using Chinese characters in SQL. Who has encountered it? Such as value & lt; & gt;` None`
request对象对请求体,请求头参数的解析
Do you have a boss to help look at this error report and what troubleshooting ideas are there? Oracle CDC 2.2.1 flick 1.14.4