面向对象 (无序属性的集合)
--->减少重复代码
1、创建对象
--->1.属性全部放在构造函数里面
--->2.方法写在外面(prototype)
(1)、工厂模式
function createperson(name) {
var o = new Object();
o.name = name;
return o;//o这个变量存了一个地址,把地址返回给p
}
(2)、构造函数
--->1、首字母大写,2、使用this 3、使用new
function Student(name) {
this.name = name;
}
var stu = new Student("张三");
(3)、原型模式
--->我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
function Person() {
}
Person.prototype.name = "刘星星";
Person.prototype.age = 18;
var p1 = new Person();
var p2 = new Person();
console.info(p1.name);--->刘星星
console.info(p2.name);--->刘星星
console.info(p2.age);--->18
--->原型链继承
优点:复用代码,让相应的对象之间的直接产生关系
例:
function Person(name) {
this.name = name;
this.sleep = function() {
}
}
function Student(name) {
}
Student.prototype = new Person();--->表继承
var stu = new Student();
stu.sleep();
※※ --->构造原型方式 ※※
例:
function Student(name) {
this.name = name;
}
Student.prototype.study = function() {
console.info(this.name + "惊呼:好好学习,天天向上");
}
var stu = new Student("洋洋");
stu.study();
※※ --->组合继承 ※※
function Father(name) {
this.name = name;
}
Father.prototype.lookBook = function() {
console.info(this.name + "在看书");
}
function Son(name, age) {
//继承属性,继承不了prototype的东西
Father.apply(this, [name, age]);//或call
this.hobby = "打游戏";//这个写在哪里都无所谓
}
//继承方法method
Son.prototype = new Father();
//新的方法必须写在继承之后
Son.prototype.playPiano = function() {
}
var son = new Son("李四", 22);
son.lookBook();
※※ --->json对象 ※※
var stu = {
"name": "龙姑娘",
age: 16,
classmate: {
name: "李小玉",
sex: "lady"
}
}
console.info(stu.age);
stu.boyFriend = "庞sir";
console.info(stu.boyFriend);
console.info(stu.name);
console.info(stu.classmate.name);