问答
1.OOP 指什么?有哪些特性 ?
定义: Object Oriented Programming面向对象编程。
特性:
- 封装:将代码封装为一个整体,拥有自己独立的特性,像外界提供调用的接口,隐藏内部具体的实现细节。
- 继承:子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。
- 多态:在继承的基础上实现,父类引用指向子类对象,多个子类可以使用同一方法而互不影响,以此获得不同的结果。
2.如何通过构造函数的方式创建一个拥有属性和方法的对象? ?
当new一个函数的时候,这个函数就会作为构造函数创建一个对象。
function People(name,age){
this.name=name;
this.age=age;
this.sayName=function(){
console.log(this.name) ;
}
}
var p1=new People('candy',20);
p1.age //20
p1.sayName() //candy
3.prototype 是什么?有什么特性?
prototype是什么:js中每个数据类型都是对象(除了undefined),而每个对象都继承自另外一个对象,后者称为“原型”(prototype)对象,只有null除外,它没有自己的原型对象。
特性:
a:原型对象的作用,就是定义所有对象实例所共享的属性和方法。
b:prototype,对于构造函数来说,它是一个属性;对于对象实例来说,它是一个原型对象。
看下面的例子:
function People(name){
this.name=name;
}
People.prototype.sayName=function(){
console.log(this.name);
};
var p1=new People("candy");
var p2=new People("hank");
//对象实例p1和p2共享sayName()这个方法
p1.sayName(); //"candy"
p2.sayName(); //"hank"
//prototype对于构造函数来说,它是一个属性
People.prototype; //People {sayName: function}
4.画出如下代码的原型图?
function People (name){
this.name = name;
this.sayName = function(){
console.log('my name is:' + this.name);
}
}
People.prototype.walk = function(){
console.log(this.name + ' is walking');
}
var p1 = new People('饥人谷');
var p2 = new People('前端');
5.以下代码中的变量age有什么区别?
function People (){
var age = 1 //这个age是局部变量
this.age = 10; //this指向People的实例对象,age是实例对象的属性
}
People.age = 20; //给People这个函数绑定静态属性age,通过new创建的实例对象是访问不到这个属性的
People.prototype.age = 30; //原型对象的属性,由它产生的实例都要受到影响
不妨看一测试下结果:
var p1=new People();
p1.age; //10 如果函数People内为定义this.age = 10,这里的结果将是30
People.age //20
代码
1.创建一个 Car 对象,拥有属性name、color、status;拥有方法run,stop,getStatus。
function Car(name,color,status){
this.name=name;
this.color=color;
this.status=status;
}
Car.prototype.run=function(){
console.log("I`m running!")
}
Car.prototype.stop=function(){
console.log("I was stopped!")
}
Car.prototype.getStatus=function(){
console.log("My status is "+this.status)
}
var car1= new Car("BMW","black","good");
car1.color //"black"
car1.getStatus() // My status is good
2.创建一个 GoTop 对象,当 new 一个 GotTop 对象则会在页面上创建一个回到顶部的元素,点击页面滚动到顶部。拥有以下属性和方法:
- ct属性,GoTop 对应的 DOM 元素的容器
- target属性, GoTop 对应的 DOM 元素
- bindEvent方法, 用于绑定事件
- createNode方法, 用于在容器内创建节点
主要代码:
function GoTop(ct){
this.ct=ct;
this.target=$("<button class='gotop'>回到顶部</button>");
this.bindEvent();
this.createNode();
}
GoTop.prototype={
createNode:function(){
var cur=this;
this.ct.append(this.target);
$(window).on("scroll",function(){
if($(window).scrollTop()>300){
cur.target.show();
} else{
cur.target.hide();
}
})
},
bindEvent:function(){
this.target.on("click",function(){
console.log(1);
$(window).scrollTop(0);
})
}
}
new GoTop($("body"));