构造函数
-
在构造函数本身上添加的成员是静态成员,只能由构造函数本身来访问()
-
构造函数内部创建的对象成员称为实例成员,只能由实例化的对象来访问(new 来访问)
构造函数原型 prototype
构造函数原型是构造函数的属性,这个属性是一个对象,也称prototype为原型对象
Star.prototype 是一个对象
作用:是为了共享方法,从而达到节省内存空间的目的
注意:每一个函数都有prototype属性
//构造函数里放属性
function Star(uname,age){
this.uname = uname;
this.age = age;
}
Star.prototype.sing = function(){
console.log(this.uname+'在唱歌')
}
var ldh = new Star("刘德华",22);
//原型对象里放方法
为什么实例对象能用到原型对象上的方法? 因为每个对象都有__proto__
对象原型:proto
主要作用:指向prototype
对象原型:是对象的一个属性,每一个实例对象都有一个对象原型(proto)
实例对象的–proto–和构造函数的prototype等价
统一称呼:–proto-- 原型 prototype原型对象
constructor 构造函数
constructor是一个属性,原型对象的属性
主要作用:指回构造函数本身 (就不会迷路了)
//属性
function Star(uname,age){
this.uname = uname;
this.age = age;
}
//方法
Star.prototype = {
constructor: Star,
chang:function(){...},
tiao:function(){...},
rap:function(){...},
}
原型链
由原型串起来的一个链
作用:提供一个成员的查找机制,或者查找规则
继承
ES5之前:没有extends继承。 通过构造函数+原型对象模拟实现继承(组合继承)
普通函数里的this指向window
call() 构造函数和原型对象
调用这个函数,并且修改函数运行时的this指向
继承属性:调用父类函数,用call改变this指向
function Father (uname,age){
this.uname = uname;
this.age = age;
}
//new Father();
//让Son继承Father
function Son (uname,age,score){
//.call改变Fatger构造函数的this的指向
Father.call(this,uname,age);//继承用call,第一个参数用this改变指向,后面继续+继承的属性名
this.score = score;//添加子函数特有的属性
}
var obj = new Son('儿子',13,99)
继承方法: new一个父类的实例对象,把它赋值给子类的原型对象;在用构造函数constructor指回子类的构造函数本身
function Father(){属性:}
Father.prototype.chang = function(){
console.log("唱歌");
}
function Son (){}
Son.prototype = new Father();
Son.prototype.tiao = function(){
console.log('跳舞');
}
var obj = new Son();
obj.chang();
console.log(Son.prototype);
console.log(Father.prototype);
forEach遍历数组
var arr = ['red','blue','yellow','pink'];
//遍历数组
arr.forEach(function(elm,i,arrAbc)){
console.log(elm,i,arrAbc);
}
arr.filter筛选 返回新数组
var arr = [123,5464,13,56,94,47];
var result=arr.filter(function(val,index,obj){//var为每一项内容;index为索引;obj为arr本身,可以不写
return val >100;//返回一个新数组,内容为arr中大于100的数
})
var result=arr.filter(function(val,index,obj){
return val%2==0;//返回一个新数组,内容为arr中的偶数
})
some()
array.some(function(currentValue,index,arr))//查找数组中的元素,找到满足条件立刻停止
some()方法用于检测数组中的元素是否满足指定条件,通俗点查找数组中是否有满足条件的元素
注意返回的是布尔值,如果查找到,就返回true,如果找不到就返回false.
currentValue为数组当前项的值 index 索引,arr数组本身 可不写
var arr = [123,5464,13,56,94,47];
var result=arr.some(function(currentValue,index,arr){
return val ==123;// 有满足条件,返回一个布尔值 true,循环立刻停止
})//依靠于return 的值 如果让他return false 就会一直循环
总结:
创建对象:字面量,构造函数,自定义构造函数
new的执行:创建一个新对象,this指向这个对象,执行函数,返回这个对象
成员:静态成员:只能由构造函数来访问
实例成员:只能由实例化对象来访问
原型对象:构造函数的一个属性,prototype,【共享方法】
对象原型:__proto__对象的一个属性, 指向原型对象
constructor: 原型对象的属性,指回构造函数本身
原型链:提供了一个查找成员的机制,方向
继承:es6之前没有extends和super
es5:组合继承:构造函数和原型对象
属性:调用父类构造函数执行,用call改变this的指向
方法:把父类的实例对象赋值给子类的原型对象,用constructor指回子类构造函数本身
数组方法:forEach ,filter,some
es6之后才引进了堆和栈的说法,js还没有普及堆和栈的说法