概述:
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
1.没有为构造函数设置其原型对象属性
// 构造函数
function cat (name, color) {//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 ★★
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])
}
打印结果: