newObject
var x="age";
var obj=new Object();
obj.name="gao";
obj.x=18;
.字符串
obj[x]=16; // [变量]
console.log(obj);
字面量
对象 中 __proto__
函数 中 prototype
var x="hooby";
var obj={ "name":"gao","age":18 };
obj.sex="男";
obj[x]="唱歌"
obj.say= function (){
}
console.log(obj);
.字符串
[变量 / "key名" / "key名是特殊字符" ]
var obj2={"aa bb":123, ".x":456};
console.log( obj2["aa bb"] ); console.log( obj2[".x"] );
工厂模式
var obj1={"name":"gao0","age":18,"say":function(){}} var obj2={"name":"gao1","age":19,"say":function(){}} var obj3={"name":"gao2","age":20,"say":function(){}} var obj4={"name":"gao3","age":21,"say":function(){}};
function students(name,age){
var obj={
"name":name,
"age":age,
"say":function(){
}
}
return obj;
}
1、创建函数 2、传入参数 3、函数内创建对象 4、retrun 对象 *依次调用
var obj1 = students("gao",18); console.log(obj1);
console.log(obj1 instanceof Object); 循环调用
var names=["gao","wang","li","zhao"];
var ages=[18,19,20,21];
for(var i=0;i<names.length;i++){
console.log( students(names[i] ,ages[i] ) ) }
优点: 返回 新对象,互不影响
缺点: 代码重复(相同方法)
有从属(不能知道对象从那里来)
-->instanceof 只能判断 是 对象,不能判断属于谁
构造函数
优点: 有从属
缺点: 代码重复(相同方法)
共识:构造函数首字母大写
function Students(name,age){
this.name= name;
this.age= age;
this.say=function(){
}
}
构造函数写法:
1、创建函数 2、传入参数 3、this.属性名 = 值
调用:
var obj =new 构造函数(参数)
var obj1= new Students("gao",19); console.log(obj1);
console.log( obj1 instanceof Object ); console.log( obj1 instanceof Students );
原型模式
原型模式
优点: 公共/相同 的 属性 、方法 不重复
有从属关系// 缺点: 原型上的 属性不可单独改变
function Fn(){
}
Fn.prototype.name="高";
Fn.prototype.age=19;
var obj1=new Fn();
console.log("obj1",obj1);
修改 obj1.__proto__.name
obj1.__proto__.name 发生变化
obj2.__proto__.name 发生变化
obj1 和 obj2 共用 __proto__ 对象
公共/相同 的 属性 、方法 放在 构造函数.prototype 上 -- 实现 代码不重复
obj1.__proto__.name ="王";
console.log("obj1-name:",obj1.__proto__.name,obj1.name) var obj2=new Fn();
console.log("obj2",obj2);
console.log("obj2-name:",obj2.__proto__.name,obj2.name);
组合模式
组合模式 (构造 + 原型)
有从属关系
不重复
属性定义在 构造函数 内
function Fn(name,age){
this.name=name;
this.age=age;
}
方法 定义在 构造函数的 原型对象上 Fn.prototype.say=function(){
console.log("哈哈哈哈哈");
}
var obj1= new Fn("gao",12);
var obj2= new Fn("王",19);
console.log("obj1",obj1);
console.log('obj2', obj2);
bj1.say();
obj2.say();