构造器
- 属性:constructor
- 值:与之关联的构造函数
- 注意点:constructor是在原型对象身上的,
我们通过 对象.constructor 访问得到的值其实就是原型对象中对应的值
![构造器](http://olghiep7g.bkt.clouddn.com/constructor.bmp)
--proto--
如果是使用构造函数创建对象,那么在创建的对象中,有一个--proto--指针指向其构造函数对应的原型对象
访问原型对象的方法
(1)构造函数.prototype
(2)对象.--proto--
注意点:
在正式的开发中,在正式的代码中不要使用该属性
因为这个属性不是ECMA标准里的,它是部分浏览器厂商为了方便程序员开发和调试而提供的一个属性,是非标准的。
<script>
function Person(){}
Person.prototype.des = "des";
var p1 = new Person();
console.log(Person.prototype == p1.__proto__); //true
</script>
hasOwnProperty
- in 关键字
001 检查对象中是否有指定的属性(实例属性 + 原型属性)
002 遍历对象
语法:“属性” in 对象
- hasOwnProperty
作用:检查对象中是否存在指定的属性(实例属性)
语法:对象.hasOwnProperty("属性") - 需求:
要求判断某个属性是否是原型属性,而且仅仅只是原型属性
01 该属性存在
02 该属性不是实例属性
<script>
Object.prototype.des = "des";
Object.prototype.age = "des";
var obj = {name:"zs",age:20};
console.log("name" in obj);
console.log(obj.hasOwnProperty("name"));
console.log(obj.des);
//in 和 hasOwnProperty
console.log("des" in obj); //true
console.log(obj.hasOwnProperty("des")); //false
function isOnlyPrototypeProperty(propertyName,obj)
{
return (propertyName in obj) && !obj.hasOwnProperty(propertyName);
}
//验证
console.log(isOnlyPrototypeProperty("name", obj));
console.log(isOnlyPrototypeProperty("des", obj));
console.log(isOnlyPrototypeProperty("age", obj)); //false
</script>
isPrototypeOf
isPrototypeOf 判断是否是原型对象的
instanceof 判断某个对象是否是指定构造函数的实例对象
<script>
function Person(){};
var demo = {};
var demo1 = {};
Person.prototype = demo;
Person.prototype.constructor = Person;
var p1 = new Person();
//判断某个对象是否是指定对象的原型对象
console.log(demo1.isPrototypeOf(p1));
</script>
网友评论