对象简介
创建对象
1.工厂模式:
----在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可。
2.构造函数模式:
----ECMAScript中构造函数可以创建特定类型的对象,类似于Array、Date等原生JS的对象。
特点: 函数名首写字母为大写
没有显示的创建对象
直接将属性和方法赋值给了this对象
没有return语句
使用new创建对象
能够识别对象
缺点: 使用构造函数的最大的问题在于每次创建实例的时候都要重新创建一次方法
3.原型模式:
----创建的每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。使用原型对象的好处就是可以让所有对象实例共享它所包含的属性及方法。
4.构造原型方式:
例:
//创建类
//1.属性全部放在构造函数里面
//2.方法写在外面(prototype)
function Student(name) {
this.name = name;
}
Student.prototype.study = function() {
console.info(this.name + "hellow word!");
}
var stu = new Student("张三");
stu.study();
5.原型链:
----原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。
例://父亲
function Father(name) {
this.fatherName = name;
}
Father.prototype.age = 18;
var ft = new Father("父亲");
console.info(ft.age);
console.info(ft.fatherName);
//儿子
function Son(name) {
this.sonName = name;
}
Son.prototype = new Father();
//每一个对象的_proto_都来自于构造函数的prototype属性
var sn = new Son("儿子");
console.info(sn.age);
console.info(sn);
6.借用构造函数:
----在子类型构造函数的内部调用超类型构造函数。
----可以通过使用apply()和call()方法在新创建的对象上执行构造函数。
(1).call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
(2).apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
(3).call和apply方法通常被用来实现类似继承一样的功能,以达到代码复用的功效。
7.组合继承:
---又叫伪经典继承,是指将原型链和借用构造函数技术组合在一块的一种继承方式。
例: 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();
8.原型链继承:
----继承起到复用代码的作用。
----让相应的对象之间的直接产生关系。
例:function Person(name) {
this.name = name;
this.sleep = function() {
}
}
function Student(name) {
}
//下句代码表继承
Student.prototype = new Person();
var stu = new Student();
stu.sleep();
9.json对象:
例:var stu = {
"name": "张三",
age: 10,
classmate: {
name: "李四",
sex: "lady"
}
}
console.info(stu.age);
stu.boyFriend = "王麻子";
console.info(stu.boyFriend);
console.info(stu.name);
console.info(stu.classmate.name);
10.私有化属性:
例:function Student(name) {
var name = name;//私有化属性
this.study = function() {
//不能使用this.name
console.info(name + "hellow word!");
}
}
var stu = new Student("李四");
//只能通过方法去使用
stu.study();
//直接点(.)是不能用的
console.info(stu.name);

浙公网安备 33010602011771号