【JavaScript】函数原型与原型链
程序员文章站
2022-05-08 15:00:42
...
一、原型(prototype)
- 当我们创建函数时,解析器会向函数中添加一个
prototype
属性,它默认指向一个Object空对象,即原型对象。 - 原型对象中有一个constructor属性,它指向函数对象
- 原型对象就相当于一个公共的区域,所有同一类的实例都可以访问这个原型对象,我们可以将对象*有的属性和方法设置到原型对象中。
例: 给MyClass
构造函数中添加一个属性或方法,mc,mc2对象中都可以访问该属性
function MyClass(){
}
var mc = new MyClass();
var mc2 = new MyClass();
console.log(mc.__proto__==MyClass.prototype) // true
console.log(mc2.__proto__==MyClass.prototype) // true
4. 在创建构造函数时,可以将这些对象共有的属性和方法统一添加到构造函数的原型对象中,这样就不会影响到全局作用域,每个对象都有这个属性或方法了。
function MyClass(){
}
Myclass.prototype.name = "AAA";
Myclass.prototype.fun = function(){}
二、显式原型与隐式原型
- 当函数以构造函数方式调用时,他所创建的对象中会有一个隐含的属性,指向该构造函数的原型对象,可以通过
__proto__
来访问这个属性。 - 每个函数都有一个
prototype
属性,即显式原型
每个实例对象都有一个__proto__
属性,即隐式原型 - 对象的隐式原型的值就是其对应的构造函数的显式原型的值
function Fn{
}
var fn = new Fn();
console.log(Fn.prototype===fn.__proto__) // true
三、原型链
原型对象也是对象,所以它也有原型,当我们使用一个对象的属性或方法时,会逐级向上查找,直到查找到Object
对象的原型,因为Object
的原型是没有原型的,所有如果在Object
原型中没有找到,就返回undefined
,这就是原型链(隐式原型链)。
四、其他
- 可以使用
in
来检查对象中是否有某个属性,如果自身有或者原型对象中有都会返回true
console.log("name" in mc)
- 可以使用对象的
hasOwnProperty()
来检查对象自身是否有该属性,只有自身有该属性时才会返回true
console.log(mc.hasOwnProperty("name"))
上一篇: 5、MySQL数据库-常用函数
下一篇: Java的学习历程