扩展内置对象的方法是通过原型对象
//给array增加求和方法
console.log(Array.prototype);
//1、添加方法,不影响本身
Array.prototype.sum = function(){
var sum = 0;
for(var i =1;i<this.length;i++){
sum += this[i]
}
return sum;
}
//2、会全部覆盖原来的
// Array.prototype = {
// constructor:Array,
// sum:function(){
// var sum = 0;
// for(var i =1;i<this.length;i++){
// sum += this[i]
// }
// return sum;
// }
// }
console.log(Array.prototype);
var arr1 = [122,324,435,345,54];
console.log(arr1.sum());
call()
使用方法:father.call(son,arg1,arg2…);
作用:改变this指向;
var oo = {
name:"101"
}
function fn(x,y){
console.log("我是在这的人");
console.log(this);
console.log(x+y)
}
// fn();
// fn.call();
// fn.call(oo);
//如下,fn就的内容变成了oo的
fn.call(oo,1,2)
组合继承
1.组合继承属性
function Father(uname,age){
this.uname = uname;
this.age = age;
}
function Son(uname,age,score){
Father.call(this,uname,age);
this.score = score;
}
var son1 = new Son('cxk',22,750);
console.log(son1)
2.组合继承方法
function Father(uname,age){
this.uname = uname;
this.age = age;
}
Father.prototype.money = function(){
console.log("继承了财产");
}
function Son(uname,age,score){
Father.call(this,uname,age);
this.score = score;
}
//错误方法,会导致son的原型链指向father,更改son的原型链实为修改father
// Son.prototype = Father.prototype;
//正确做法
Son.prototype = new Father();
//如果利用对象形式修改了原型对象,要记得利用constractor指回原来的原型对象
Son.prototype.constractor = Son;
Son.prototype.exam = function(){
console.log('我要考试了');
}
var son1 = new Son('cxk',22,750);
console.log(son1)
console.log(Father.prototype)
ES5中新增的方法
- 数组方法
forEach() 遍历
var arr = [1,2,3];
var sum = 0;
arr.forEach(function(value,index,array){
console.log('每个数组元素:'+value);
console.log('每个数组元素的索引号:'+index);
console.log('数组本身:'+array);
sum += value;
})
console.log(sum);
filter() 筛选数组(返回值为数组)
var arr = [12,323,34];
var newarr = arr.filter(function(value,index){
// return value >= 20;
return value >= 20;
})
console.log(newarr)
some() 判断数组(返回值为布尔值)
var arr = [12,323,34];
var flag = arr.some(function(value){
// return value >= 20;
return value < 2;
})
console.log(flag);
var arr1 = ['red','pink','blue'];
var flag1 = arr1.some(function(value){
return value == 'pink';
})
console.log(flag1);
- 字符串方法
trim() 截掉空白字符
<input type="text"> <button>点击</button>
<div></div>
<script>
var str = ' andy ';
console.log(str);
var str1 = str.trim();
console.log(str1);
var input = document.querySelector('input');
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.onclick = function(){
if(input.value == ''){
alert('请输入内容');
}else{
console.log(input.value);
console.log(input.value.length);
div.innerHTML = input.value;
}
}
</script>
- 对象方法
Object.keys(obj1) 获取对象obj1自身的所有属性名,返回值为数组类型
var obj = {
id:1,
pName:'小米10',
pPrice:3999,
pDate:'2020-10-11'
}
var arr = Object.keys(obj);
console.log(arr)
Object.defineProperty(obj1,prop,descriptor) 定义对象中的属性或修改原来的属性
var obj = {
id:1,
pName:'iphone12',
price:7999
}
//添加属性、修改属性值的方法
//1、常规操作
// obj.num = 1000;
// obj.price = 8999;
// console.log(obj);
//2、使用对象方法
Object.defineProperty(obj,'num',{
value:2000,
writable:false,//默认为false,是否可以重写
enumerable:false,//默认是false,是否可以枚举,是否可以遍历
configurable:false,//默认是false,是否可以被删除,不允许再修改这个属性的特性
})
Object.defineProperty(obj,'price',{
value:2000
})
obj.num = 2;
console.log(obj.num);
delete obj.id;
delete obj.num;
console.log(obj)