手记

JavaScrip原型理解(二)

在JavaScript中,函数本身也是一个包含了属性和方法的对象,每个函数都有prototype属性,而该属性所储存的就是原型对象,我们需要明白的是当一个函数被创建时,属性中就包含了prototype属性,它的初始值是一个“空”对象。

function foo(a,b){return a*b;
}console.log(typeof foo.prototype) //object

我们可以为这个空对象赋予一些属性和方法,这并不会对foo函数本身造成什么影响;因为只有当foo()作为构造器使用时,这些属性才会起作用。

isPrototypeOf()方法

每个对象都会有一个isPrototypeOf()方法,这个方法会告诉我们当前对象是否是另一个对象的原型。

var monkey = {    hair: true,    feeds: 'banans',    breathes: 'air'}function Human(name){    this.name = name;
}
Human.prototype = monkey;var  george = new Human('george');console.log(monkey.isPrototypeOf(george)); // true

我们创建一个叫Human的构造函数,并将其原型属性设置为指向monkey,需要注意的是,我们在这里是预先知道monkey可能是george的原型;然后获得了一个布尔值的回应。那么是否能在不知道某个对象原型是什么情况下,获得对象的原型呢,ES5有一个Obeject.getPrototypeOf()方法。

Object.getPrototypeOf() 方法返回指定对象的原型

Object.getPrototypeOf(george) === monkey //true

hasOwnProperty()方法

用hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。这个方法(不要忘了它是从Object继承来的)只在给定属性存在于对象实例中时,才会返回true。

function A(){
}
A.prototype.name = 'hello';var b = new A();
b.age = 1;console.log(b.hasOwnProperty("age")) // trueconsole.log(b.hasOwnProperty("name")) //false

GitHub:JavaScript-Demo




作者:周希孟
链接:https://www.jianshu.com/p/d382ee17d590


0人推荐
随时随地看视频
慕课网APP