1.遍历【迭代】对象
object对象
new关键字代表的是新开辟一块内存空间
没有被引用的内存空间,会在适当的时候被销毁
var person = new Object();
var person = {};
两句代码含义等同
访问对象的属性除了用 对象引用.属性key以外,还可以使用对象引用[属性key]
/var key = 'sex';
//console.log(person[key]);//key
person = {
name : "张三",
sex : "性别",
age: "54",
height : "180",
eat:function(){
console.log(this.name+'正在吃饭');
console.log('到了晚上');
return '睡觉';
}
};
//遍历[迭代]对象
var b;
for(var a in person){
b = person[a];
if(typeof b == 'number'){
console.log(a+':'+b);
}
}
2.面向对象的程序设计
a.function构造器
共同点:动态创建一块内存空间,闭包
不同点:
函数调用无法拿到空间的地址的,而且这块地址是临时地址,执行完函数后,就会销毁
new开辟内存空间,把这块空间的地址返回,这块空间就有可能长时间被引用
b.prototype原型
通过原型使通过同样一个构造器锁new(创建)出来的对象具有相同的属性跟行为。
prototype本质是一个对象
c.foreach
c.this
d.继承
//普通函数
function eat(){
console.log('就知道吃');
return "eat";
}
var res = eat();
console.log(res);
//构造器函数 封装
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype = {
name:'谁啊',
age:'15',
eat:function(){console.log('eat');},
sleep:function(){console.log('sleep');},
}
var p1 = new Person('臧三','14');
var p2 = new Person('里欧斯','55');
p1.eat();
p2.eat();
console.log(p1.name);
console.log(p1.name);
function Dog(name){
this.name = name;
}
Dog.prototype = {
name : '流浪狗',
bark : function(){
console.log("叫唤");
}
}
var dog = new Dog('美丽');
dog.bark();
//小头爸爸牵着大头儿子(的手)去吃饭
//吃完饭之后小头爸爸背着大头儿子回家
//面向对象程序设计的过程! 封装
//1:找对象 小头爸爸 大头儿子 饭
//2:抽象(类,构造器)
//3:创建对象并且建立关系(操作对象)
function Person(name){
this.name = name;
}
Person.prototype = {
eat : function(rice){
console.log(this.name+"正在吃"+rice.name);
}
getHand : function(person){
console.log(this.name+"牵着"+person.name+"的手");
}
}
function Rice(name){
this.name = name;
}
var x = new Person('小头爸爸');
var d = new Person('大头儿子');
x.getHand (d);
var df = new Rice('蛋炒饭');
var xf = new Rice('炒饭');
x.eat(df);
d.eat(xf);
1.prototype内存解析
prototype是原型,是一块所有对应构造器创建的对象都共享的内存空间。
在面向对象涉及程序的时候,属性应该是对应的空间的,而功能应该是prototype公共空间的。
2.通过prototype扩展功能
所有的构造器都是继承于Object构造器的,因此只要Object的原型里有的功能,所有的对象都有。