一、js对象的创建

1.普通最简单的方式

var teacher = new Object( );
teacher.name = "zhangsan";
teacher.age = 35;
teacher.job = "教师";
teacher.say = function( ) {
    return this.name + this.age + this.job;        //this代表的是teacher下的作用域
};
console.log(teacher.say( ));

2.对象初始化(单体方式)-json格式,不适合多个对象

var json = {name:"张三", age:15, sex:1, show:function( ){alert(this.name+this.age+this.sex)},};
var person = {
    name : "张三",
    age : 25,
    say : function ( ) {
        return "我是张三";   
    },
    action : function( ) {
        return "正在学习关于js高级应用...";   
    },
};
console.log(person.name +" "+ person.age);
console.log(person.say() +" "+ person.action());

3.构造函数创建

function Student(_name, _age) {
    this.name = _name;
    this.age = _age;
    this.say = function( ) {
        return "我是"+this.name+",我今年"+this.age+"岁了。";   
    }   
    this.action = function( ) {
        return "正在动手操作js高级应用...";   
    }
}
var student = new Student("李四", 22);
console.log(student.say( )+" "+student.action( ));

4.工厂模式

function createObject(_name, _age){
    var obj = new Object();    //私有对象obj,因此是无法通new方法
    obj.name = _name;
    obj.age = _age;
    obj.run = function( ) {
        return this.name + this.age;
    };
    return obj;        //返回对象的引用(返回的类型为Object类型) 
}
var obj1 = createObject("tom", 25);
var obj2 = createObject("jack", 30);
console.log(obj1.run());
console.log(obj2.run());

二、js对象的方法

对象的方法也可以划分为 私有方法、对象方法、类方法

function Person( ) {
    //对象方法
    this.getUsername = function( ) {
        return "admin";
    }
    //私有方法
    var getPassword = function( ) {
        return "123456";
    }
    //调用私有方法
    console.log("密码:"+getPassword( ));
    //对象方法
    Person.prototype.getAge = function( ) {
        return 25;
    }
}
//对象方法
Person.prototype.getName = function( ) {
     return "admin" ;
}
Person.prototype = {
     start : function( ) {
          return "start";
     },
     end : function( ) {
          return "end";
     }
}
//类方法
Person.getCountry = function( ) {
    return "China";
}
var p = new Person( );
console.log("用户名:"+p.getUsername( ));
console.log("年龄:"+p.getAge( ));
console.log(Person.getCountry( ));

两种写法的对比

方式一:

function Student() {
    this.name = "cxb";
    this.talk = function() {
        return "我叫" + this.name;
    }
}
var stu1 = new Student();
var stu2 = new Student();

方式二:

function Student() {
    this.name = "cxb";
}
Student.prototype.talk = function() {
    return "我叫" + this.name;
}
var stu1 = new Student();
var stu2 = new Student();

方式一与方式二产生的结构几乎是一样的,而本质区别就是:方式二new产生的二个实例对象共享了原型的talk方法,这样的好处节省了内存空间,方式一则是要为每一个实例复制talk方法,每个方法属性都占用一定的内存的空间,所以如果把所有属性方法都声明在构造函数中,就会无形的增大很多开销,这些实例化的对象的属性一模一样,都是对this的引用来处理。除此之外方式一的所有方法都是拷贝到当前实例对象上。方式二则是要通过scope连接到原型链上查找,这样就无形之中要多一层作用域链的查找了。

注:prototype方式的位置不能随意互换

function Person() {

}
// 位置一
Person.prototype = {
walk : function() {
console.log("walk")
},
run : function() {
console.log("run")
}
}
// 位置二
Person.prototype.talk = function() {
console.log("talk")
} var p = new Person();
p.talk()
console.log(Person.prototype) 
如果位置一和位置二调换,p.talk()异常 Uncaught TypeError: p.talk is not a function
console.log(Person.prototype) 打印信息如下:

如果位置一和位置二调换,会少一个原型链方法

三、js对象的属性

js对象的属性也可以划分为:对象属性、私有属性、类属性

function User( ) {
    this.username = "admin";     //对象属性
    var password = "123456";    //私有属性
    this.getPassword = function(){
        return password;    //获取私有属性的方法
    }
    User.prototype.age = 25;    //对象属性
}
User.country = "China";        //类属性
var user = new User( );
console.log("用户名:"+user.username);
console.log("密码:"+user.getPassword( ));
console.log("年龄:"+user.age);
console.log("国籍:"+User.country); //length属性
function box(name, age){
    return name+age;
}
console.log(box.length);        //返回box中的参数个数
console.log(User.length);

四、js对象的引用

对象的引用其实就是将一个对象赋值给另一个对象的过程

var a = 123;
var b = a;
a = "张三";
console.log("a的值:"+ a);    //将打印张三
console.log("b的值:"+ b);    //将打印123 var x = 240;
var y = x;
x = 320;
console.log("x="+ x);
console.log("y="+ y); var array1 = [1,2,3];
var array2 = array1;
array2.push(4);        //array1.push(5);结果一样
console.log("array1:"+ array1);
console.log("array2:"+ array2); var arr1 = [1,2,3];
var arr2 = [];
arr2 = arr1;
arr2.push(4);
console.log(arr1);    //显示1,2,3,4
console.log(arr2);    //显示1,2,3,4

五、命名空间

使用命名空间可以解决同名函数冲突问题及防止变量的污染,命名空间采用JSON方式

var com = { };
com.bj = { };
com.sh = { };
com.hz = { }; com.bj.get = function( ) {
    console.log("北京");
} com.sh.get = function( ) {
    console.log("上海");
} com.hz.get = function( ) {
    console.log("杭州");
} com.bj.get( );
com.sh.get( );
com.hz.get( );

六、this关键字

1.普通最简单的方式

//当全局作用域调用函数时,this对象引用的就是window
//this指代的是当前的方法属于谁 或 当前发生事件的对象
//window是一个对象,而且是js中最大的对象,是最外围的对象
console.log(window);                   //输出:[object Window]
console.log(typeof window);        //输出object object类型
console.log(this);                          //输出:[object Window] this目前表示的是window,因为是在window范围下
console.log(typeof this);              //输出object object类型
//上面的this就是window var color = "红色的";                 //这里的color是全局变量,而这个变量又是window的属性
console.log(window.color);        //输出:红色的
console.log(this.color);              //输出:红色的 window.color = "红色的";            //相当于    var color="红色的";
console.log(this.color); var box = {
    color:"蓝色的",                           //这里的color是box下的属性
    showColor : function( ) {
        alert("box:"+this.color);        //这里的this.color,代表的是box下的color
    }   
}
//例:全局的方法属于window对象下的
function show(){
    alert("show():"+this.color );        //这里的this.color,其实还是在window下,这里执行的是动态的,第一次在window下,第二次在box2下
}
//其实上一种写法等同于:window.show=function(){...}  即这里的 show()方法属于window对象的
alert(" "+this.color);
box.showColor( );
show( );
//
var box2 = {
    color:"黄色的",   
}
box2.showColor = show;    //这段代码相当于如下:
box2.showColor( );
/*
var box2 = {
    color:"黄色的",
    showColor:function( ) {
        alert("box:"+this.color);
    }       
}
*/ //例:
var array = [1, 2, 3, 4];
array.a = 20;
array.getA = function( ) {
    console.log(this.a);    //这里的this代表array对象
} var oDiv = document.getElementById("box");
oDiv.onclick = function( ) {
    console.log(this);        //这里的this代表oDiv对象   
}

七、内置对象

1.URI编码方法 功能:字符串解析。功能非常强大,但也非常危险。

var name = "//Lee李";
var a = encodeURI(name);
var b = encodeURIComponent(name);
console.log(name);
console.log(a);            //只对中文进行编码
console.log(b);           //对所有进行编码(中文及特殊字符)
//解码
console.log(decodeURI(a));
console.log(decodeURIComponent(b));

2.eval方法

eval("var num = 100");
console.log(num);
//字符串"var num = 100",其实就是一段javascript代码,eval会把这个字符串解析成javascript
eval("console.log(250)");
console.log(eval("console.log(250)"));     //打印出250及undefined(先执行里面的打印) eval("function show( ){return 666;}");
console.log(show( ));

3.global

//alert(Global);
var box = "Lee";
console.log(window.box);
console.log(Object); //返回一个构造函数
  • Global对象无法直接访问
  • Global对象内置属性和方法
  • Global对象的属性:undefined、NaN、Object、Array、Function等。

javascript基础-js对象的更多相关文章

  1. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  2. JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...

  3. javascript基础(六)对象

    原文http://pij.robinqu.me/ JavaScript Objects 创建对象 对象直接量 var o = { foo : "bar" } 构造函数 var o ...

  4. javaScript基础-04 对象

    一.对象的基本概念 对象是JS的基本数据类型,对象是一种复合值,它将很多值(原始值或者对象)聚合在一起,可通过名字访问这些值,对象也可看做是属性的无序集合,每个属性都是一个名/值对.对象不仅仅是字符串 ...

  5. JavaScript基础 -- js常用内置方法和对象

    JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...

  6. JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)

    DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...

  7. JavaScript基础--DOM对象加强篇(十四)

    1.document 对象 定义:document对象代表的整个html文档,因此可以去访问到文档中的各个对象(元素)document重要的函数 1.1 write 向文档输出文本或js代码 1.2 ...

  8. javascript基础知识-对象

    javascript创建对象有三种方法: 1)对象直接量 例:var empty = {}; var point = {x:1,y:4}; var book = { "main title& ...

  9. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

随机推荐

  1. VS2015常用快捷键总结(转)

    生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...

  2. 《Effective C++》第3章 资源管理(1)-读书笔记

    章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...

  3. pg_bulkload使用记录

    很久之前就使用过pg_bulkload来导入数据了,并做了对比试验,现在另一个项目又需要用了,这里做个记录: 1.rpm包比较老,下下来之后发现只支持到pg94,目前我用的是pg10,因此放弃. 2. ...

  4. Linux .o a .so .la .lo的区别

    o: 编译的目标文件a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool编译出 ...

  5. Android性能优化系列之电量优化

    电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所 ...

  6. [置顶] 曙光到来,我的新书《Android进阶之光》已出版

    独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...

  7. IOS开发 警告 All interface orientations must be supported unless the app requires full screen.

    在IOS开发中遇到警告  All interface orientations must be supported unless the app requires full screen. 只要勾上R ...

  8. 流形-Manifold

    流形,也就是 Manifold .不知道你有没有为我在本文开头放上的那个地球的图片感到困惑?这是因为球面是一个很典型的流形的例子,而地球就是一个很典型的“球面”啦(姑且当作球面好啦). 有时候经常会在 ...

  9. 百度的富文本编辑器UEDITOR

    还是百度的ueditor 比较好用,文件导入后,基本不用配置就可以直接使用图片,文件上传等功能. CKeditor要注意的地方太多了 .但是相对ckeditor 样式比较好看.

  10. java大文件断点续传

    java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路:1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...