构造函数
//构造函数
function structure(name,no){
this.name = name;
this.no = no;
this.methods = function(){
document.write(`学号:${this.no} 姓名:${this.name} 爱好: 无 `);
}
}
let stu1 = new structure("小明",1);
//调用方法执行
stu1.methods();
原型
每个函数都有一个prototype属性, 是一个指针,指向一个对象, 这个对象的用途是包含可以由特定实例共享的属性和方法
//构造函数
function structure(name,no){
this.name = name;
this.no = no;
}
structure.prototype.methods = function(){
document.write(`学号:${this.no} 姓名:${this.name} 爱好: 无 `);
}
let stu1 = new structure("小明",1);
//调用方法执行
stu1.methods();
instanceof
判断一个实例是不是构造函数实例化出来的对象 返回true/false
instanceof
来判断这个实例(p1)是不是这个构造函数(Person)实例化出来的对象
/* console.log(p1 instanceof Person); */ /* =>true */
// console.log(p1 instanceof Student); /* =>false */
/* 万物皆对象 */
// console.log(p1);
// console.log(p1 instanceof Object)
// console.log(p1);
// console.log(p1 instanceof Object)
/**
* @param 子类
* @param 父类
* */
function extend(child, parent) {
function f() { }
f.prototype = parent.prototype;
child.prototype = new f();
child.prototype.constructor = child;
}
// Object.prototype.foot = 2;
/*
空对象,几乎不占内存
修改Student的prototype对象,不会影响到Person的prototype对象
*/
/* 父类 */
function Person() { }
Person.prototype.head = 1;
Person.prototype.foot = 2;
/* 子类想继承父类的属性 */
function Student() { }
/* 新建一个空对象 */
// function f(){}
// /* 把父类的原型直接赋值给空对象的原型上 */
// f.prototype = Person.prototype;
// /* 把空对象的实例化对象 给到子类的原型上 */
// Student.prototype = new f();
// /* ★constructor构造器都是指向自己的 */
// Student.prototype.constructor = Student;
extend(Student, Person)
let stu1 = new Student();
console.log(stu1.foot);
console.log(stu1);
/* 不会影响到Person的prototype对象 */
// Student.prototype.age = 30;
// let p = new Person();
// console.log(p);
/* 原型链就是一层一层向上找的过程 */
/* 原型链继承就是利用了上面这种特性 */