//回顾构造函数 function Box(name, age) { this.name = name; //实例属性 this.age = age; this.run = function() { //实例方法 return this.name + this.age; } }
//原型 function Box() {} //构造函数体内什么都没有,如果有就是实例属性或者实例方法 Box.prototype.name = ‘Lee‘; //原型属性 Box.prototype.age = 100; //原型属性 Box.prototype.run = function () { //原型方法 return this.name + this.age; }; var box1 = new Box(); var box2 = new Box(); alert(box1.name); //Lee alert(box1.age); //100 alert(box1.run()); //run是一个方法,run()是一个值
function Box() {} //构造函数体内什么都没有,如果有就是实例属性或者实例方法 Box.prototype.name = ‘Lee‘; //原型属性 Box.prototype.age = 100; //原型属性 Box.prototype.run = function () { //原型方法 return this.name + this.age; }; var box1 = new Box(); var box2 = new Box(); //原型属性和实例属性的区别是共享,共享保持一致, //如果是实例方法,不同的实例化,他们的方法地址是唯一的不一样的 //如果是原型方法,那么他们的地址是共享的,大家都一样 alert(box1.run == box2.run); //true,说明是地址共享的。 alert(box1.__proto__); //访问的是一个指针,指向prototype原型对象 alert(box1.constructor); //构造属性,可以获取构造函数本身 //作用是被原型指针定位,,然后得到构造函数本身 //其实就是对象实例对应的原型对象的作用 //IE浏览器不能访问,但是别的浏览器虽然能访问却不能获取内部信息 //返回的是[object,object];
删除实例中的属性
delete box1.name; //删除实例中的属性 alert(box1.name); //Lee,本来是jack,因为实例中的属性删除了所以为Lee;
覆盖原型中的属性
Box.prototype.name = ‘LLL‘; //覆盖原型中的属性; alert(box1.name); //LLL覆盖原型中的属性;
hasOwnProperty()判断属性是在实例中
alert(box1.hasOwnProperty(‘name‘)); //false;说明属性不在实例中 box1.name = ‘j‘; alert(box1.hasOwnProperty(‘name‘));//true;说明属性在实例中
判断只有在原型中的属性
//只有原型中的属性 function isProperty(object, protety) { return !object.hasOwnProperty(protety) && (protety in object) } alert(isProperty(box1, ‘name‘));//true,此刻就原型中有属性name,所以是true,如果 //把原型中的name删除,那么就是false box1.name = ‘hello‘; alert(isProperty(box1, ‘name‘));//false,因为isProperty这个函数是判断原型中是否有name //属性,此刻实例中给了box1的一个name属性
有错误希望能帮我提出来,我会改正
时间: 2024-10-01 04:41:10