<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>对象</title>
</head>
<body>
<script>
/*
面向过程编程(POP, Procedure-Oriented Programming)
面向对象编程(OOP, Object-Oriented Programming)
把构成问题的事物分解成各个对象, 建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为
1.是对单个事物的一种抽象, 抽象的原则是隐藏细节, 暴露必需的部分(其实这就是抽象的概念)
2.对象是一个容器, 封装了对应的属性和方法
-- 属性是对象的状态
-- 方法是对象的行为
面向对象的三大特性: 封装性, 继承性和多态性
--封装: 对外只暴露最小的完整可用借口,隐藏内部的实现细节
--继承: 可以让子类被视作一个父类, 拥有父类的属性和方法
--多态: 多态指得是一个对象可以体现出多种形态
优点: 灵活, 代码可复用程度高, 高度模块化
js的对象是由什么组成的? 属性和方法
构造函数约定首字母大写的目的是什么? 为了和 普通函数 做区别
变量和属性的区别是什么? 变量能做的事情, 属性也能做,其实是一样的. 只不过变量是自由的, 不属于任何人, 而属性是属于某一个对象的.
*/
var a = [];
var b = 10;
a.b = 10; // 属性值 和上面的 变量 b 是一样的
// a.push = false;
a.push(1); // a.push = false; a.push is not a function
console.log(a);
var obj = new Object();
var obj1 = {
name: "谁困了-小明", // 属性
desc: "自觉站起来", // 属性
getName: function() {
// 如果一个成员是一个函数,我们一般称之为 方法(method),其他的成员叫做属性(properties)
// 属性适用于保存值得, 函数或者方法是用来定义逻辑实现的
console.log(this.name + '困了');
}
}
var obj2 = {
name: "谁困了-小亮", // 属性
desc: "自觉站起来", // 属性
getName: function() {
// 如果一个成员是一个函数,我们一般称之为 方法(method),其他的成员叫做属性(properties)
// 属性适用于保存值得, 函数或者方法是用来定义逻辑实现的
console.log(this.name + '困了');
}
}
var obj3 = {
name: "谁困了-小刚", // 属性
desc: "自觉站起来", // 属性
getName: function() {
// 如果一个成员是一个函数,我们一般称之为 方法(method),其他的成员叫做属性(properties)
// 属性适用于保存值得, 函数或者方法是用来定义逻辑实现的
console.log(this.name + '困了');
}
}
// 封装函数
function sleepy (name, desc) {
/*
1. var obj = {}
2.
2.1obj.name = name;
obj.desc = desc;
2.2 obj.getName = function() {
//...
}
3. return obj;
*/
return {
name: "谁困了-" + name, // 属性
desc: desc, // 属性
getName: function() {
// 如果一个成员是一个函数,我们一般称之为 方法(method),其他的成员叫做属性(properties)
// 属性适用于保存值得, 函数或者方法是用来定义逻辑实现的
console.log(this.name + '困了');
}
}
}
var obj4 = sleepy('小刚', '自觉站起来');
console.log(obj4);
// obj3 === obj4 false
// 当需要创建多个对象的时候, 代码会重复, 冗余度高, 所以就需要 封装了, 继而有了工厂模式的概念
</script>
</body>
</html>
上述运行结果: