JS对象

对象可理解为我们生活中的对象,你有对象吗,没有可以创建一个,她有名字,年龄,外观的特点,即属性;也有一些特长,即方法。

实际对象是一组没有特定顺序的值,每个属性和方法都有一个名字,每个名字都和一个值一一对应。

根据面向对象设计,我们可以创建任意多个具有相同属性和方法的对象。

学对象的重要意义是封装一些数据以作他用。

对象的特点

  • 封装
  • 继承
  • 多态
  • 具有特征和行为

对象的创建方式

对象字面量的方式(推荐)

<script>
    var obj = {
        name: "mark",
        age: 23,
        sex: "男",
        sayHi: function () {
            console.log("大家好,我是" + this.name);
        }
    };
    console.log(obj.name);
    obj.sayHi();
</script>

其中name、age、sex就是属性,sayHi是方法;

属性的增、删、改、查

  • 增  obj.wife = "xiao";
  • 改  obj.name = "xiao";
  • 删  delete obj.name
  • 查  obj.name

工厂模式

<script>

//创建多个对象
     function creatStudent(name,age,sex,score) {
        var student = new Object();
        //对象的属性
        student.name = name;
        student.age = age;
        student.sex = sex;
        student.score = score;
        //对象的方法
        student.sayHi = function () {
            console.log("大家好,我是" + this.name);
        };
        //返回对象
        return student;
     }
     var s1 = creatStudent("niefeng",12,"男",36);
     var s2 = creatStudent("wjg",12,"男",36);
     var s3 = creatStudent("zdy",12,"男",36);
</script>

构造函数(推荐)

构造函数和普通函数一模一样,只不过加new就会生成对象。

注意:构造函数命名最好采用大驼峰命名规则(第一个字母大写),为了好区分。

使用构造函数的主要问题是每个方法都会在实例上重新创建一遍。

<script>
	//对象的属性  是一个变量
function Student(name,age,sex,score) {
	this.name = name;
	this.age = age;
	this.sex = sex;
	this.score = score;
	//对象的方法
	this.sayHi = function () {
		console.log("大家好,我是" + this.name);
	};

}
	// 内存开辟空间,存储新创建的对象
	// 会把this设置为当前对象
	// 执行函数内部的代码,设置对象的属性和方法
	// 返回新创建的对象
	var s1 = new Student("niefeng",12,"男",36);
	var s2 = new Student("nifeng",12,"男",36);
	var s3 = new Student("nieng",12,"男",36);
</script>

原型模式

  • 原型定义了构造函数对象的公共祖先,在函数出生的时候就已经定义好了的东西;
  • 原型也是对象;
  • 一个正常的对象应该是有自己的对象属性和方法,还有原型继承的属性和方法。
<script>
    function Person() {

    }
    Person.prototype.name = "mark";
    Person.prototype.age = 21;
    Person.prototype.job = "前端";
    Person.prototype.sayHi = function () {
        console.log("大家好,我是" + this.name);
    };
    var person1 = new Person();
</script>

除了以上方法外还有些拓展和组合的创建方法:

  • 动态原型模式
  • 寄生构造函数模式
  • 稳妥构造函数

包装类

三个特殊的引用类型:

Boolean, Number, String

在js中,这几个基本类型都是有方法的。但是矛盾的是,Boolean, Number, String是基本类型不是对象,逻辑上应该是不能有方法的。

实际上是因为访问的时候,后台做了一些隐式的处理:

  1. 创建Boolean, Number, String类型的一个实例;
  2. 在实例上调用指定方法;
  3. 销毁这个实例。

引用类型和基本包装的主要区别就是对象的生存期。基本包装类型只在内存中存在一瞬间。

<script>
    var num = 2;
    num.len = 3;
    // new Number(2).len = 3; //立即就销毁了
    // new Number(2).len;
    console.log(num.len); // undefined
</script>

每个基本包装类型都是提供了许多便捷的方法。

Boolean类型

  • valueOf( )

Number类型

  • valueOf( ):返回对象表示的基本类型的值
  • toLocaleString():返回数值的字符串
  • toString():返回数值的字符串
  • toFixed():按照指定的小数位返回数值的字符串表示
  • toExponential():指数表示法
  • toPrecision():返回固定大小格式或指数格式

String类型

1、字符方法

  • charAt()
  • charCodeAt()

2、字符串操作方法:

  • concat()
  • slice()
  • substr()
  • substring()

3、字符串位置方法:

  • indexOf():向后搜索
  • lastIndexOf():向前搜索

4、trim():删除前后的空格

5、字符串大小写转换:

  • toLowerCase()
  • toLocaleLowerCase()
  • toUpperCase()
  • toLocaleUpperCase()

6、字符串的模式匹配方法

  • search()
  • match()
  • replace()

7、localeCompare()

8、fromCharCode()

03-17 01:11