单体创建对象
var Tom = {
name:'tom',
age:18,//写入属性
showName:function () {
alert(this.name);
},
showAge:function () {
alert(this.age);
}
};//方法
console.log(Tom.name);//调用属性
console.log(Tom.age);
Tom.showName();//调用方法
工厂模式创建对象
function Person(name,age,job) { //函数名开头大写
//var o = new Object();//创建一个空对象
var o ={};//创建一个空对象,一般使用这个
o.name = name;
o.age = age;
o.job = job;
o.showName = function () {
alert(this.name);
};
o.showAge = function () {
alert(this.age);
};
o.showJob = function () {
alert(this.job);
};
return o;
}
var Tom = Person('tom','18','程序猿');
Tom.showJob();
var Jack = Person('Jack','18','程序猿');
Jack.showJob();
var Esther = Person('esther','18','啦啦啦');//写入属性
Esther.showJob();//调用方法 调用Esther的showJob属性
原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
}
// 所有是实例共享(原型)
Person.prototype.showName = function () {
alert(this.name);
};
Person.prototype.showAge = function () {
alert(this.age);
};
Person.prototype.showJob = function () {
alert(this.job);
};
var Esther = new Person('esther',18,'lll');//var 指向showAge showJob showName
Esther.showJob = function () {
alert('我的工作是'+this.job)//调用时先找自己的
};
var Jack = new Person('jack',18,'啦啦啦');
Esther.showJob();
Jack.showJob();
call和apply
/* call和apply的区别
二者都可以改变当前的this,区别在于apply方法要将参数放入数组中再传参*/
function aa(a,b){
alert('我的this是' + this + ',我的a是' + a + ',我的b是' + b);
}
aa(2,3);
aa.call('abc',2,3);//我的this是abc,我的a是2,我的b是3
aa.apply('abc',[2,3])
call和apply都可以调用函数,可以用修改this
传参方式不同 call方法将参数直接放在 apply方法要将参数放入数组中再传参
新增选择器
window.onload = function(){
var div1 = document.querySelector('#div1');
console.log(div1);
var lis = document.querySelectorAll('.list li');
console.log(lis.length);//8
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8