(一)对象说明
var 对象名 = {
属性名:属性值
}
① 属性值可以是任何类型,属性值为函数时,是一个方法
② 每个属性之间用逗号隔开,最后一个属性不要写逗号
③ 在方法中调用对象的属性,要加上对象名.属性名(这里的对象名可以用this替换,即this.属性名,这里的this是第一人称)
(二)对象的操作
① 增:对象名.要添加的属性名 = ‘要添加的属性值’
② 查:对象名.要查看的属性名
③ 改:对象名.要修改的属性名 = ‘要修改的属性值’
④ 删:delete 对象名.属性名
⑤ 对象的操作代码展示
var seeMovie = { movie:‘霸王别姬‘, newMovie:"", downloadMovie:function(){ this.movie = this.newMovie; this.newMovie = ""; }, uploadingMovie:function(uMovie){ this.newMovie = uMovie; }, deleteMovie:function(){ delete this.movie; this.movie = ""; } }
|
(三)当一个对象的属性没有时,返回undefined,不会报错
(四)对象的创建方法
1)对象字面量/对象直接量 var obj = {};
2)构造函数
① 系统自带的构造函数 var obj = new Object(); obj.name = ‘xiaoli’;
② 自定义构造函数
(一)自定义构造函数的步骤
1)写一个函数
function Person(){};
2)构造自定义对象
var person1 = new Person();
3)注意:自定义构造函数为了和普通函数区别,必须遵守以下规则
构造函数的函数命名必须符合大驼峰式命名规则(每个单词的首字母大写,如:TheFirstName)
4)自定义构造函数可以通过传参实现属性值选配
5)具体代码展示
function HumanBody(color){ this.cerebrumHealth = 100; this.heartHealth = 100; this.lungHealth = 100; this.liverHealth = 100; this.kidneyHealth = 100; this.stomachHealth = 100; this.hairColor = color; }
var onePerson = new HumanBody(‘black‘); onePerson.smoke = function(){ this.lungHealth--; } onePerson.sports = function(){ this.heartHealth++; this.lungHealth++; }
|
(二)构造函数的内部原理
1) 前提:必须要加new,当对构造函数加new以后,就会执行下面三步,如果没有new就是一个普通函数
① 在构造函数里面的最前面会隐式创建 var this = {};
② 执行对象里面的代码
③ 在代码的最后 return this;
function Student(){ //① var this = {}; 隐式创建一个AO,把this放进去 AO = {this:{}} this.name = ‘xiaowang‘ //② 执行代码 //③ return this; //隐式返回 }
|
2) 说明:如果在构造函数里面,显示的去返回一个对象,那么就会把这个对象返回,就不会返回this对象了,因为显示的要大于隐式的;但是最后显示的要返回的必须是对象,而不能是一个原始值,如果是一个原始值的话,这个就不起作用了
3) 基于构造函数的内部原理的三步骤,我们可以显示的去模拟,但是不建议这样去书写,因为一些深层次的东西是模拟不到的,如原型问题
function HumanBody(color) { var that = {}; that.cerebrumHealth = 100; that.heartHealth = 100; that.lungHealth = 100; that.liverHealth = 100; that.kidneyHealth = 100; that.stomachHealth = 100; that.hairColor = color; return that; }
var person = HumanBody(‘red‘); //这里没有new了 console.log(person);
|
3)其他问题
① document.write()不适合做信息展示
② 大驼峰式命名规则(每个单词的首字母大写,如TheFirstName)
③ 小驼峰式命名规则(第一个单词的首字母小写,后面的单词的首字母大写,如theFirstName)
④ js中的字符串最好用单引号
(一)包装类前期说明
1)原始值不能有属性和方法
2)只有对象才能有属性和方法,数组也是一种对象
3)undefined和null不可以有属性
4)数字/字符串/布尔值有两种,一种是原始值形式的数字/字符串/布尔值,另一种是原始值对象式的数字/字符串/布尔值
5)创建原始值对象式的数字/字符串/布尔值的方法分别是new Number()/new String()/new Boolean()
6)创建好的原始值对象式的数字/字符串/布尔值拥有了对象的属性和方法,但是如果对这些转换后的数据进行了原始值的计算,这些数据就会成对象返回成原始值
(二)包装类
1) 当我们对原始值直接当成对象进行操作时,它就会隐式的去创建成原始值对象式类型,而这一过程我们就叫做包装类
2) 包装类的这一过程是隐式的,隐式过程具体见下面的代码
var num = 3; //这是一个原始值 num.len = 2; //原始值没有属性和方法,这里隐式运用包装类,见下面①②步 //① new Number(3).len = 2; //② delete创建的第一步,如果下面继续有原始值调用属性和方法,依然重复一二步 //销毁的是新创建的包装类和原始值没有关系
|
3) 对象字符串是有length等属性的,但是对象数字可没有
4) 相应代码进一步说明
包装类练习 |
var str = ‘abc‘; str += 1; //‘abc1‘ var test = typeof(str); //‘string‘ if(test.length == 6 ){ //调用包装类 因为字符串的基本包装类型有length属性,并返回6,比较后相等,条件成立 //new String(string).length == 6 delete test.sign = "typeof返回的结果可能为String"; // new String(string).sign = "typeof返回的结果可能为String" delete } document.write(test.sign); //undefined //new String(string).sign
|
包装类练习变换 |
var num = 123456; if (num.length == 6) { //调用包装类 //new Number(123456).length == 6 这个条件不成立,因为数字的基本包装类型根本就没有length属性 delete test.sign = "hello world"; document.write(test.sign); //不会输出 } document.write(test.sign); //报错 test is not defined
|
代码一(构造函数,this) |
var a = 5; function test(){ a = 0; alert(a); alert(this.a); var a; alert(a); } // test(); new test();
//运行test()和new test()的结果分别是什么
//① 运行test() //普通函数 // 全局 GO = { a:5, test:function test(){} } // 执行test AO = { a:0 } // alert(a); 0 // alert(this.a); 5 // alert(a); 0
//② 运行new test() //构造函数 // function test(){ // // var this = {a:}; // a = 0; // alert(a); //0 // alert(this.a); //undefined // var a; // alert(a); //0 // // return this; // }
|
代码二(构造函数,传参) |
function employee(name,code){ this.name = "wangli"; this.code = "A001"; } newemp = new employee(‘zhangming‘,‘A002‘); document.write(‘雇员姓名‘ + ‘:‘ + newemp.name + ‘<br/>‘); //wangli document.write(‘雇员代号‘ + ‘:‘ + newemp.code + ‘<br/>‘); //A001
|
代码三(作用域,构造函数,闭包) |
function Person(name,age,sex){ var a = 0; this.name = name; this.age = age; this.sex = sex; function sss(){ a++; document.write(a); } this.say = sss; //闭包 }
var oPerson = new Person(); oPerson.say(); //1 oPerson.say(); //2 var oPerson1 = new Person(); //重新执行Person函数,生成一个新的执行上下文 oPerson1.say(); //1
|
代码四(预编译) |
var x = 1,y = z = 0; function add(n){ return n = n + 1; } y = add(x); function add(n){ return n = n + 3; } z = add(x); console.log(x,y,z); //1 4 4
//输出x,y,z; //预编译 GO = { x:1, y:0, //function add(n){ return n = n + 3 } z:0, //function add(n){ return n = n + 3 } add:function add(n){ return n = n + 3 } } //函数名相同时,后面的会覆盖前面的
|
原文:https://www.cnblogs.com/080-hll/p/12431231.html