javascript基础-js对象
一、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)


三、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对象的更多相关文章
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换
首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...
- javascript基础(六)对象
原文http://pij.robinqu.me/ JavaScript Objects 创建对象 对象直接量 var o = { foo : "bar" } 构造函数 var o ...
- javaScript基础-04 对象
一.对象的基本概念 对象是JS的基本数据类型,对象是一种复合值,它将很多值(原始值或者对象)聚合在一起,可通过名字访问这些值,对象也可看做是属性的无序集合,每个属性都是一个名/值对.对象不仅仅是字符串 ...
- JavaScript基础 -- js常用内置方法和对象
JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...
- JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)
DOM编程1.为什么要学习DOM(1) 通过dom编程,我们可以写出各种网页游戏(2)dom编程也是ajax的重要基础2.DOM编程介绍DOM = Document Object Model(文档对象 ...
- JavaScript基础--DOM对象加强篇(十四)
1.document 对象 定义:document对象代表的整个html文档,因此可以去访问到文档中的各个对象(元素)document重要的函数 1.1 write 向文档输出文本或js代码 1.2 ...
- javascript基础知识-对象
javascript创建对象有三种方法: 1)对象直接量 例:var empty = {}; var point = {x:1,y:4}; var book = { "main title& ...
- Javascript基础 - js中曾经忽略的知识点
深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...
随机推荐
- 在js中做数字字符串补0
转自(http://blog.csdn.net/aimingoo/article/details/4492592) 通常遇到的一个问题是日期的“1976-02-03 HH:mm:ss”这种格式 ,我的 ...
- 五.dbms_transaction(用于在过程,函数,和包中执行SQL事务处理语句.)
1.概述 作用:用于在过程,函数,和包中执行SQL事务处理语句. 2.包的组成 1).read_only说明:用于开始只读事务,其作用与SQL语句SET TRANSACTION READ ONLY完全 ...
- mysql function动态执行不同sql语句
create procedure cps() begin ) default 'user'; set strSql = concat('select * from ',table_user); pre ...
- SpringMVC札集(10)——SSM框架整合
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- Unity3D 屏幕空间雪场景Shader渲染
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- 将海康大华等网络摄像机RTSP流进行网页Flash rtmp和H5 hls直播的技术方案
前言 再小的技术点也会有他的市场! 一直以来,都有一些不被看好,认为是成本太高,无法大规模展开的软件和产品形态,就好比每一座城市都会有他的著名小吃一样,即使是慕名而来的人源源不断,受众群体也总是有限, ...
- React Native组件(二)View组件解析
相关文章 React Native探索系列 React Native组件系列 前言 了解了RN的组件的生命周期后,我们接着来学习RN的具体的组件.View组件是最基本的组件,也是首先要掌握的组件,这一 ...
- URL中不应出现汉字
浏览器会在跳转时,先将汉字编译成 Unicode,然后跳转,导致hash值改变两次,相当于history 中 加入了两次URL
- 哈工大LTP语言分析:分词、词性标注、句法分析等
1. LTP介绍和安装 LTP语言云官网 在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...
- Realm的常规使用与线程中的坑
结识 Realm 的催化剂 在我们公司的项目迭代中,由于在之前的聊天这个模块关于用户信息的传值有问题,而之前因为项目经过很多开发者的手,且不提整体的架构有多混乱,就单说缓存这块,就是乱的不行,有的地方 ...