<pre name="code" class="javascript"><pre name="code" class="javascript"><span style="white-space:pre"> </span>/*面向对像中的属性和方法*/
<span style="white-space:pre"> </span>function createPerson(name) {
this.name=name;
};
createPerson.prototype.name="小明";
var obj=new createPerson('小强');
console.log(obj.name); //小强
function createPerson2() {
// this.name=name;
};
createPerson2.prototype.name="小明";
var obj2=new createPerson2();
console.log(obj2.name); //小明
/**
* 根据以上两个例子可以看出,实例上有name属性就会打印出实例上的属性,
* 如果实例上没有属性,则打印出原型上的属性,方法也是一样。
* 由此得出,js的原型链,首先在自身的构造函数上找属性和方法,如果构造函数没有就到原
* 型上找,和函数作用域有点接近,就近原则。原型链的最顶层就是Object.prototype了。
*/
<span style="white-space:pre"> </span>function createPerson(name) {
this.name=name;
this.showName = function(){
console.log(this.name);
}
};
var obj=new createPerson('小强');
console.log(obj.hasOwnProperty('showName')); <span style="white-space:pre"> </span>//true
console.log(obj.hasOwnProperty('name')); //true;
function createPerson2() {
};
createPerson2.prototype.name="小明";
createPerson2.prototype.showName=function(){
console.log(this.name);
};
var obj2=new createPerson2();
console.log(obj2.hasOwnProperty('showName')); <span style="white-space:pre"> </span>//false
console.log(obj2.hasOwnProperty('name')); //false;
/**
* hasOwnProperty,
* 用来判断对像是否具有该属性,但只限于构造函数内的,原型上的是查不到的。
* 返回的是一个Boolean值 false 或 true
*/
<span style="white-space:pre"> </span>function createPerson() {};
createPerson.prototype.name = "小明";
createPerson.prototype.age = 20;
var obj=new createPerson();
console.log(obj.constructor); //createPerson
createPerson.prototype={
name:"小明",
age:20
};
var obj=new createPerson();
console.log(obj.constructor); //Object
/**
* 第一种赋值的方式是在原型上添加属性,第二种是把原型等于一个对像。而这个对像的构造
* 函数是Object。
* 查看对像的构造函数
* constructor 每个函数自身都带有该属性,是程序自动生成的属性。
* 程序自动生成的这句话,createPerson.prototype.constructor=createPerson
* 该属性并不是原型上。
* 基于以上两个赋值的方式,应该手动改变一个constructor的指向:
*/
<span style="white-space:pre"> </span>createPerson.prototype={
constructor:createPerson,
name:"小明",
age:20
};
//或者
createPerson.prototype.constructor=createPerson;
var obj = new createPerson();
console.log(obj.constructor)