当前位置:网站首页>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>
运行结果:
边栏推荐
- flink. CDC sqlserver. You can write the DEM without connector in sqlserver again
- 喜马拉雅网页版每次暂停后弹窗推荐下载客户端解决办法
- 基于智慧城市与储住分离数字家居模式垃圾处理方法
- thinkphp3.2信息泄露
- China's first electronic audio category "Yamano electronic audio" digital collection is on sale!
- Delete a record in the table in pl/sql by mistake, and the recovery method
- 第十四次试验
- 终于可以一行代码也不用改了!ShardingSphere 原生驱动问世
- MySQL can connect locally through localhost or 127, but cannot connect through intranet IP (for example, Navicat connection reports an error of 1045 access denied for use...)
- C# 初始化程序时查看初始化到哪里了示例
猜你喜欢
随机推荐
Guys, how can mysql-cdc convert the upsert message to append only
剑指 Offer II 107. 矩阵中的距离
20排位赛3
PLC信号处理系列之开关量信号防抖FB
请教个问题,我用sql-client起了个同步任务,从MySQL同步到ADB,历史数据有正常同步过去
2016 CCPC Hangzhou Onsite
有没有大佬帮忙看看这个报错,有啥排查思路,oracle cdc 2.2.1 flink 1.14.4
Three years after graduation
uboot机构简介
Flinkcdc failed to collect Oracle in the snapshot stage. How do you adjust this?
Elaborate on MySQL mvcc multi version control
The difference between viewpager2 and viewpager and the implementation of viewpager2 in the rotation chart
[original] what is the core of programmer team management?
小程序实现页面多级来回切换支持滑动和点击操作
Addition, deletion, modification and query of ThinkPHP database
C socke server, client, UDP
China's first electronic audio category "Yamano electronic audio" digital collection is on sale!
Gym - 102219j kitchen plates (violent or topological sequence)
网上可以开炒股账户吗安全吗
HCIP 第一天 笔记整理