1、函数(构造函数)
var p = new Person('Herry', '22');
alert(p.age);
function Person(name, age) {
this.name = name;
this.age = age;
}
alert(p.age);
function Person(name, age) {
this.name = name;
this.age = age;
}
这时我们就有了一个 function,而且这个 function 会有一个 prototype 的属性, 通过这个属性可以访问该函数的原型,
从图中可以看出,其实不仅仅是可以通过 Person.prototype 访问原型,原型中也有一个 constructor 的属性,Person.prototype.constructor 就指向 Person 函数自身。
创建实例:
1 var p1 = new Person("Jack", 20);
2 var p2 = new Person("Peter", 22);
3 alert(p2.name); // Peter
4 alert(p2.constructor); // 函数自身
5 alert(Person.prototype.constructor); // 函数自身
2 var p2 = new Person("Peter", 22);
3 alert(p2.name); // Peter
4 alert(p2.constructor); // 函数自身
5 alert(Person.prototype.constructor); // 函数自身
当创建了实例 p1 和 p2 之后,p1, p2 内都存在内部属性 [ [ Prototype ] ],
而这个属性,其实就指向构造函数 Person 的原型,有趣的是 p1 和 p2 和构造函数 Person 本身没有直接的关系, 它们的联系就是它们都指向了同一个原型
每当读取对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性,
搜索首先从对象实例本身开始,如果在实例中找到了具有给定名字的属性,则返回该属性的值,
如果没有找到,则继续搜索该实例的原型,在原型对象中查找具有给定名字的属性。
Person.prototype.sayHi = function() {
document.write("<div>Hi</div><hr>");
}
var say = new Person();
say.sayHi(); // Hi
document.write("<div>Hi</div><hr>");
}
var say = new Person();
say.sayHi(); // Hi
原型肯定是一个object;
原型的构造函数,指向函数本身,输出其本身的构造代码;