1.面向对象与面向过程的区别
面向过程侧重整个问题的解决步骤,着眼局部或者具体
面向对象侧重具体的功能,让某个对象具有实现某种功能,更加侧重于整体
2.字面量的方式创建对象
//用大括号括起来的一系列的键值对,构成了js对象.这个对象称之为字面量对象
var person = {
name : "Tom",
age : 22,
sex : "男",
speak : function(){
console.log("abc");
}
}
注意:属性名和属性值之间用冒号表示,不同属性之间用逗号隔开
3.内存的存储方式
ECMAScript中所有函数的参数都是按值传递访问变量有按值和按引用两张方式,而参数只能按值传递例子:
function addTen(num){ num += 10; return num; } var count = 20; var result = addTen(count); alert(count); //20,没有变化,如果是按引用传递那会变成30 alert(result); //30
例子:
function setName(obj){ obj.name = "Nicholas"; obj = new Object(); obj.name = "Grey"; } var person = new Object(); setName(person); alert(person.name); //"Nicholas"
function foo(num, obj){ num = 20 obj.name = "abc" } var num = 10; var obj = { name: "aaa" } foo(num, obj) console.log(num); //10 console.log(obj.name); //"abc"
变量的传值传递值,其本身不发生改变,对象传递的是地址
内存由栈内存和堆内存构成,栈内存存储参数,堆内存存储地址;
4.工厂模式
function createPerson(name,age,sex){
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.speak = function(){
console.log("abc");
}
return person; //注意要有返回值
}
//调用
var p1 = createPerson("Tom",22,"男");
5.构造函数
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
this.speak = function(){
console.log("abc");
}
}
//调用
var p2 = new Person("Jack",22,"男");
p2.speak();
说明:
使用构造函数创建对象,必须使用关键字new ,后面跟着构造函数的名,根据需要传入相应的参数。
其实使用 new 构造函数() 的方式创建对象,经历了下面几个步骤。
创建出来一个新的对象
将构造函数的作用域赋给新对象。意味着这个时候 this就代表了这个新对象。
执行构造函数中的代码。 在本例中就是给新对象添加属性,并给属性初始化值。
构造函数执行完毕之后,默认返回新对象。 所以外面就可以拿到这个刚刚创建的新对象了。