- 我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
- 原型对象实际就是一个构造函数的实例对象,与普通的实例对象没有什么本质上的区别,js中每一个对象都有一个原型对象。不过他比较特殊,该对象所包含的所有属性和方法能够供构造函数的所有实例共享,这就是其他语言所说的继承,而javascript通过原型对象来实现继承,简称原型继承。静态原型继承:Object.prototype.[method field] ;
- isPrototypeOf(实例对象) 判断原型的方法
- ECMA5: Object.getPrototypeOf():根据实例对象获得原型对象
- object.hasOwnProperty(attribute) 判断属性是否属于对象本身
- in 操作符 判断对象中是否存在该属性(无论是实例对象还是原型对象)
- ECMA5新特性 Object.keys();拿到当前对象里的所有keys 返回一个数组
- ECMA5新特性 Object.getOwnPropertyNames 枚举对象所有的属性 :不管该内部属性能否被枚举
//构造函数式
function Person(name,age){
this.name = name;
this.age = age;
//this.sayName = function(){alert('我是一个函数');}
this.sayName = sayName;
}
//定义一个函数,实现函数共享,全局函数
function sayName(){
alert(this.name);
}
var p1 = new Person('z3',20);
var p2 = new Person('z4',32);
p1.sayName();
p2.sayName();
console.log(p1.sayName == p2.sayName);
/*
prototype 创建每一个函数都有一个prototype属性,这个属性其实就是一个指针,而这个指针总指向一个对象
这个对象就的用途是将特定的属性和方法包含在内,起到一个所有实例所共享的作用
*/
function Person(){
}
//原型对象被所有的实例所共享
var obj = Person.prototype;
console.log(obj.constructor);
obj.name='z3';
obj.age = 20;
obj.sayName = function(){
alert(this.name);
}
var p1 = new Person();
//console.log(p1.name);
var p2 = new Person();
//p2.name= 'z4';
//console.log(p2.age);
//p1.sayName();
//p2.sayName();
//构造函数 原型对象 对象实例
//构造函数.prototype = 原型对象
//原型对象.constructor = 对象实例
console.log(obj.constructor);
//对象实例.prototype = 构造函数
console.log(obj.isPrototypeOf(p1));