JS面向对象---封装(阮一峰网络日志学习笔记)
2018-03-07 20:01
483 查看
概述:
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
1.没有为构造函数设置其原型对象属性
// 构造函数
function cat (name, color) {
this.name = name;
this.color = color;
this.type = 'TYPE';
this.eat = function () {
console.log('eat')
}
}
// 实例对象1
var cat1 = new cat('cat1_name', 'cat1_color');
//console.log(cat1.constructor == cat) // cat1含有一个constructor属性自动指向它们的构造函数
//console.log(cat1 instanceof cat) // 验证原型对象和实例对象之间的关系
// 实例对象2
var cat2 = new cat('cat2_name', 'cat1_color');
//console.log(cat2 instanceof cat) // 验证原型对象和实例对象之间的关系
console.log(cat2.type === cat1.type) // true (这里有些疑惑)
//console.log(cat2.eat == cat1.eat) // false
2.为构造函数设置其原型对象属性
// 构造函数
function cat (name, color) {
this.name = name;
this.color = color;
}
// 构造函数的原型对象
cat.prototype.type = 'PROTOTYPE TYPE';
cat.prototype.eat = function() {
console.log('PROTOTYPE EAT');
}
// 实例对象1
var cat1 = new cat('cat1_name', 'cat1_color');
// 实例对象2
var cat2 = new cat('cat2_name', 'cat1_color');
console.log(cat2.type === cat1.type) // true ★★
console.log(cat2.eat === cat1.eat) // true ★★
3.构造函数的方法
3.1 isPrototypeOf()
这个方法用来判断,某个proptotype对象和某个实例之间的关系。
alert(Cat.prototype.isPrototypeOf(cat1)); //true
alert(Cat.prototype.isPrototypeOf(cat2)); //true
3.2 hasOwnProperty(test_property)
这个方法用来判断一个属性(test_property)是否是实例对象的本地属性、或者是继承自构造函数的原型对象(prototype)的属性。
alert(cat1.hasOwnProperty("name")) // true
alert(cat1.hasOwnProperty("type")) // false
3.3 in 运算符
3.3.1 in 运算符 可以直接判断:某个实例对象是否含有某个属性,不管是不是本地属性
console.log("name" in cat1) // true
console.log("type" in cat1) // true
console.log("eat" in cat1) // true
3.3.2 in 运算符可以遍历对象中的每个属性
for (var key in cat1) {
console.log(key + ' == ', cat1[key])
}
打印结果:
name == cat1_name
color == cat1_color
type == PROTOTYPE TYPE
eat == function () {
console.log('PROTOTYPE EAT');
}
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
1.没有为构造函数设置其原型对象属性
// 构造函数
function cat (name, color) {
this.name = name;
this.color = color;
this.type = 'TYPE';
this.eat = function () {
console.log('eat')
}
}
// 实例对象1
var cat1 = new cat('cat1_name', 'cat1_color');
//console.log(cat1.constructor == cat) // cat1含有一个constructor属性自动指向它们的构造函数
//console.log(cat1 instanceof cat) // 验证原型对象和实例对象之间的关系
// 实例对象2
var cat2 = new cat('cat2_name', 'cat1_color');
//console.log(cat2 instanceof cat) // 验证原型对象和实例对象之间的关系
console.log(cat2.type === cat1.type) // true (这里有些疑惑)
//console.log(cat2.eat == cat1.eat) // false
2.为构造函数设置其原型对象属性
// 构造函数
function cat (name, color) {
this.name = name;
this.color = color;
}
// 构造函数的原型对象
cat.prototype.type = 'PROTOTYPE TYPE';
cat.prototype.eat = function() {
console.log('PROTOTYPE EAT');
}
// 实例对象1
var cat1 = new cat('cat1_name', 'cat1_color');
// 实例对象2
var cat2 = new cat('cat2_name', 'cat1_color');
console.log(cat2.type === cat1.type) // true ★★
console.log(cat2.eat === cat1.eat) // true ★★
3.构造函数的方法
3.1 isPrototypeOf()
这个方法用来判断,某个proptotype对象和某个实例之间的关系。
alert(Cat.prototype.isPrototypeOf(cat1)); //true
alert(Cat.prototype.isPrototypeOf(cat2)); //true
3.2 hasOwnProperty(test_property)
这个方法用来判断一个属性(test_property)是否是实例对象的本地属性、或者是继承自构造函数的原型对象(prototype)的属性。
alert(cat1.hasOwnProperty("name")) // true
alert(cat1.hasOwnProperty("type")) // false
3.3 in 运算符
3.3.1 in 运算符 可以直接判断:某个实例对象是否含有某个属性,不管是不是本地属性
console.log("name" in cat1) // true
console.log("type" in cat1) // true
console.log("eat" in cat1) // true
3.3.2 in 运算符可以遍历对象中的每个属性
for (var key in cat1) {
console.log(key + ' == ', cat1[key])
}
打印结果:
name == cat1_name
color == cat1_color
type == PROTOTYPE TYPE
eat == function () {
console.log('PROTOTYPE EAT');
}
相关文章推荐
- JS面向对象---非构造函数之间的继承(阮一峰网络日志学习笔记)
- JS面向对象---构造函数之间的继承(阮一峰网络日志学习笔记)
- 韩顺平 javascript教学视频_学习笔记19_js面向对象三大特征(封装,继承,多态)
- 【原生js】js面向对象三大特征之封装笔记
- JS学习笔记——面向对象,设计模式
- JS学习笔记-OO疑问之封装
- js面向对象的学习笔记九(BOM 与 DOM 经常使用的属性分析)
- Python 学习笔记 - 面向对象(封装,继承和多态)
- 面向对象三大特征之封装与static——(Java学习笔记四)
- js设计模式之迭代器模式学习笔记--封装简单的数组迭代器
- 黑马程序员 java学习笔记——面向对象1:封装
- js学习笔记之面向对象
- JS OO 学习笔记 ——JS封装使用prototype添加方法
- Java学习笔记十八:Java面向对象的三大特性之封装
- html5学习笔记---05.JavaScript 中的面向对象,继承和封装
- 【JavaSE学习笔记】面向对象_01(入门,匿名对象,成员变量,局部变量,封装,this,构造方法)
- oc学习笔记-set和get函数 基础(Foundation)面向对象之封装方法
- 【python学习笔记】Python面向对象的理解(封装,继承,多态)
- 黑马程序员java学习笔记——面向对象的特征封装、继承和多态
- 嵌入式开发之C++基础学习笔记4--面向对象封装继承多态