一、最简单的对象,创建时进行初始化。
var human={ name:"张三", sex:"男" } console.log(human.name+human.sex);
var human1 = {}; human1.name="张三"; human1.sex="男"; var human2 ={}; human2.name="李四"; human2.sex="女";
function human(name,sex){ return { name:name, sex:sex } } var human1 = human("张三","男"); var human2 = human("李四","女");
console.log(human1 instanceof human) //false console.log(human2 instanceof human) //false
function Human(name,sex){ this.name = name; this.sex = sex; }
var human1 = new Human("张三","男"); var human2 = new Human("李四","女");
console.log(human1.constuctor == Human);//true console.log(human2.constuctor == Human);//true
console.log(human1 instanceof Human) //true console.log(human2 instanceof Human) //true
function Human(name,sex){ this.name = name; this.sex = sex; this.type ="人类"; this.skill = function(){ console.log("说话"); }; }
console.log(human1 .type == human2 .type ); //false
function Human(name,sex){ this.name = name; this.sex = sex; } Human.prototype.type ="人类"; Human.prototype.skill = function(){ console.log("说话"); }
注意:prototype的处理放在构造函数之外进行。
var human1= new Human("张三","男"); var human2= new Human("李四","女"); console.log(human1.type); // 人类 human1.skill(); // 说话 console.log(human1 .type == human2 .type ); //true
此时human1.type和human2.type指向同一块内存。
六、Prototype模式的验证方法
为了配合prototype属性,Javascript定义了一些辅助方法,帮助我们使用它。,
6.1 isPrototypeOf()
这个方法用来判断,某个proptotype对象和某个实例之间的关系。
console.log(Human.prototype.isPrototypeOf(human1)); //true console.log(Human.prototype.isPrototypeOf(human2)); //true
6.2 hasOwnProperty()
每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。
console.log(Human.hasOwnProperty("name")); // true console.log(Human.hasOwnProperty("type")); // false
6.3 in运算符
in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。
console.log("name" in human1); // true console.log("type" in human1); // true
in运算符还可以用来遍历某个对象的所有属性。
for(var prop in human1) { alert("human1["+prop+"]="+human1[prop]); }
本文整理自:http://www.ruanyifeng.com/blog/(阮一峰的网络日志)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于