面向对象 (js模拟)
面向对象特征:封装,继承,多态
1.对象 instanceof 数据类型 返回布尔值
2.创建对象三种方式回顾
3.console.dir(对象) 查看其内部结构
//说明:通过看其内部结构:在对象的__proto__中,有一个constructor构造器,指向其构造函数
//结论:实例对象就是通过构造函数创建出来的
//console.log(p1__proto__.constructor==Person);//true
// console.log(Person == Person.prototype.constructor); //true
//console.log(p1.__proto__ == Person.prototype); //true
// console.log(p1.__proto__ == Person.prototype); //true
//1. 自定义的构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
//2. 在构造函数的原型对象上添加方法
Person.prototype.eat = function () {
console.log("吃饭");
};
var p1 = new Person("小明", 12);
var p2 = new Person("小红", 12);
console.log(p1.eat == p2.eat); //false
console.dir(p1);
console.dir(p2);
// 根据内部结构, 通过以下方式来调用, 不标准
p1.__proto__.eat();
p2.__proto__.eat();
//标准写法
p2.eat();
//判断两个原型是否相等
console.log(p1.__proto__ == Person.prototype); //true
//说明: document 既是属性, 也是对象
// window.document // document 是属性
// document.write(); // document 是对象
// Person.prototype // prototype 是属性
// Person.prototype.eat // prototype 是对象
/*
结论 :
* prototype : 是构造函数的属性, 也是原型对象, 是给程序员使用的, 是标准的
*
* __proto__ : 是实例对象的属性, 也是原型对象, 给浏览器来使用的, 不标准
*
* prototype 等于 __proto__
*
* 在原型对象上添加方法, 共享数据, 节省空间
*
*
* */