一.面向对象创建div
1.创建构造函数
2.创建div节点
3.添加文本节点
4.设置css样式
5.在内部末尾插入指定元素
function DivBox(){ this.divDom=document.createElement("div");
}
DivBox.prototype.text=function(str){
this.divDom.innerHTML=str;
return this;
}
DivBox.prototype.css=function(styleobj){
for(var key in styleobj){
this.divDom.style[key]=styleobj[key]
}
return this;
}
DivBox.prototype.append=function(id){
var box=document.getElementById(id);
box.appendChild(this.divDom);
return this;
}
var div1=new DivBox();
div1.text("第二天").append("box").css({
"background":"pink",
"width":"300px",
"height":"100px"
})
二.继承的五种方法
1.原型链继承:(继承所有)继承父类 本身 以及 原型对象上的所有 属性 方法。
function Fu(name){
this.name=name
}
Fu.prototype.say=function(){
console.log("我是原型链继承")
}
function Zi(){
}
Zi.prototype=new Fu("姓名");
var my =new Zi();
console.log(my)
2. 借用构造函数继承:可以给 父类 的构造函数传参, 只能继承 父类 自身的属性方法…原型对象上的不能继承
function Fu(name,sex){
this.name=name;
this.sex=sex;
}
Fu.prototype.say=function(){
console.log("我是借用构造函数继承")
}
function Zi(n,s){
Fu.call(this,n,s)
}
var my=new Zi("姓名","年龄");
console.log(my.name,my.sex);
my say();
3.组合继承: 组合继承== 原型继承(继承所有) + 借用构造函数继承/类式继承/改变this指向继承(可以给构造函数传参)
function Fu(name,sex){
this.name=name;
this.sex=sex;
}
Fu.prototype.say=function(){
console.log("我是组合继承")
}
function Zi(n,s){
Fu.call(this,n,s)
}
Zi.prototype=new Fu();
var my=new Zi("姓名","年龄");
console.log(my.name,my.sex);
my.say();
4.寄生式继承:寄生式继承是于原型式继承紧密相关的一种思路。寄生式基础的思路与寄生构造函数和工厂模式类似,既创建一个仅用于封装继承过程的函数,该函数内部以某种方式来增强对象,最后再像真地是它做了所有工作一样返回对象。
function sub(obj) {
function Cat() { }
Cat.prototype = obj
return new Cat()
}
function createObj(obj) {
var tom = sub(obj)
tom.color = '黑色'
tom.say = function () {
console.log('你好')
}
return tom
}
var animal = {
name: "动物",
age: 2
}
createObj()
5:寄生组合继承:
寄生:在函数内返回对象然后调用
组合:
1、函数的原型等于另一个实例。
2、在函数中用apply或者call引入另一个构造函数,可传参
function Animal(name) {
this.name = name
this.run = function () {
console.log('跑')
}
}
Animal.prototype.eat = function () {
console.log('吃')
}