原型是一个对象,其他对象可以通过它来实现属性继承
一、JS对象分两种:
普通对象object和函数对象function
prototype 是函数才有的属性
proto是每个对象都有的属性
二、普通对象和函数对象区别
凡是通过new Function创建的对象都是函数对象,其他都是普通对象(通常通过object创建),可以通过typeof来判断
function f1(){}
typeof f1 // 'function'
var o1 = new f1() // 函数实例
typeof o1 //'object'
var o2 = {}
typeof o2 // 'object'
1、每一个函数对象都有一个prototype属性,但是普通对象是没有的;prototype下面又有个constructor,指向这个函数
2、每个对象都有一个名为_proto_的内部属性,指向它所对应的构造函数的原型对象,原型链基于_proto_
function Person(){}
Person.prototype.name = 'abc'
var p1 = new Person()
var p2 = new Person()
p2.name = 'mnp'
p1.hasOwnProperty('name') => false 原型属性
p2.hasOwnProperty('name') => true 实例属性
'name' in p1 => true
'name' in p2 => true
// hasOwnProperty 检测某个属性是否属于某个实例还是原型属性
//in 操作符会在通过对象能够访问给定属性时返回 true,无论该属性存在于实例中还是原型中
网友评论