`
墨香子
  • 浏览: 46307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Js对象特性总结

阅读更多
一、对象
1.Js中所有东西都是对象(除了原始值)
true, 123, 'abc', undefined, {} //null和数组也是对象


2.可以用点取对象的属性的值或设对象的属性值。
  这个属性就像是对象的指针,而属性是这个指针的名字,名字可以任意取

var obj.abc = "abc";
	var obj['abc'] = "abc";


3.所有对象都有一个隐藏的属性__proto__。
  原型链就根据这个隐藏属性来的,这个属性可以在firefox和chrome调试中看到,正常写js代码时是不会直接使用这个属性的
	var obj.__proto__.abc = "aaa";
	alert(obj.abc);            //obj.abc   ==>  obj.__proto__.abc="aaa"
	

4.在读取对象的某一个属性值的时候,会首先查找对象本身是否有该属性,如果找到则返回对应的值,否则查找这个对象的__proto__是否有该属性。由于__proto__也是一个对象,所以本条规则对__proto__也适用,直到对象的__proto__的值为null,则说明属性不存在,返回undefined,其过程如下:
	function getValue(obj, attribute){
		while(obj != null){
			var value = obj$attribute;//伪代码,找自身对应的属性
			if(value){
				return value;
			}
			obj = obj.__proto__;
		}
		return undefined;
	}


5.只有取属性值的时候才会查找原型链,设置属性值的时候不通过原型链查找。


二、函数
1.函数也是对象,为和普通对象区分,我们叫它函数对象
function func(){}   ==> var func = new Function("");


2.既然函数是对象。那么函数也有对象的性质,也可以用点给函数对象设置属性值或读取值,也有__proto__属性
func.abc = 'abc';


3.函数对象有一个prototype属性,这个属性是函数对象天生就有的,有特殊功能。
  一般情况下,ptototype属性就是一个普通对象,具有前面普通对象的所有特性,其特殊功能继续往后看
func.prototype.abc = 'bbb';



三、创建对象
1.使用函数对象创建普通对象,即new出一个“实例”
function Person(name){
		this.name = name;
	}
	Person.prototype.sayHello = function(){
		alert(this.name + " say: Hello world!");
	}
	var p1 = new Person("Habo");
	p1.sayHello();


2.其实使用new根据构造函数创建一个对象时,等价于下面三步(不考虑构造函数有返回值的情况)
var p2 = {};
	Person.call(p2, "Habo");
	p2.__proto__ = Person.prototype;


3.由上面三步中看出,在用一个构造函数new出一个对象时,会将这个新对象的原型链指针(__proto__)指向构造函数的prototype,这就是prototype的特殊功能了,除了这个功能prototype就是一个普通对象。
  这样的话,所以:
p1.sayHello ==> p1.__proto__.sayHello ==> Person.prototype.sayHello



四、继承
1.js中本没有继承的概念,只不过根据js的一些特性实现具有继承“父类”属性的效果。
function Student(id){
		this.id = id;
	}
	Student.prototype = new Person();



2.实现方式无外乎两种:a.将“父类”的属性挂到“子类”的原型链上 b.将“父类”的属性复制给“子类”
分享到:
评论

相关推荐

    javascript 的面向对象特性参考

    这是我学习javascript中面向对象特性的一点总结。希望对具有其他语言的面向对象设计经验的朋友理解javascript的OO有所帮助。我具有c++,java和python的面向对象设计的经验。 总的感受, javascript作为一种弱类型的...

    JS基于对象的特性实现去除数组中重复项功能详解

    本文实例讲述了JS基于对象的特性实现去除数组中重复项功能。分享给大家供大家参考,具体如下: 数组去重的方法有很多,不同的方法的效率也不相同。如前面文章JS实现的数组去除重复数据算法小结中就总结分析了4种实现...

    JavaScript王者归来part.1 总数2

     7.5 JavaScript的内置对象   7.5.1 Math对象   7.5.2 Date对象--创建一个简单的日历   7.5.3 Error对象   7.5.4 其他内置对象   7.5.5 特殊的对象--全局对象与调用对象   7.6 总结   第8章 集合  ...

    JavaScript程序中实现继承特性的方式总结

    JavaScript是一门强行声称面向对象的语言,而继承是面向对象的一大主要特性,这里我们根据阮一峰老师的文章来看一下JavaScript程序中实现继承特性的方式总结

    JavaScript创建对象的方式小结(4种方式)

    本文实例总结了JavaScript创建对象的方式。分享给大家供大家参考,具体如下: 潜意识里,JavaScript不能算是面向对象的语言,要算也只能说是趋向面向对象的一种语言,至少它不能很好的吻合面向对象最基本的三大特性...

    javaScript函数式编程

    本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的...

    【JavaScript源代码】vue2.03.0的响应式原理及区别浅析.docx

     先看看官网的解释: 当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是 ES5...

    js设计模式

    本书根据 JavaScript 语言的特性, 全面总结了实际工作中常用的设计模式。 全书共分为三个部分, 第 一部分讲解了 JavaScript 语言面向对象和函数式编程的知识及其在设计模式方面的作用 ; 第二部分通过一 步步完善...

    JS匿名函数、闭包

    匿名函数,也称为拉姆达函数,是一种使用JavaScript...JavaScript中的匿名函数和闭包都是非常有用的特性,利用它们可以实现很多功能。不过,因为创建闭包必须维护额外的作用域,所以过度使用它们可能会占用大量内存。

    vue改变对象或数组时的刷新机制的方法总结

    当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是ES5 中一个无法 shim 的特性...

    前端 ES6 知识总结思维导图

    它引入了许多新的语言特性和功能,以改进 JavaScript 的表达能力和开发效率。 ES6 引入了许多新的语法和功能,如箭头函数、模板字符串、解构赋值、默认参数、对象字面量扩展、类和模块等。其中一些功能是为了改善 ...

    Java语言基础下载

    面向对象的主要特性 18 抽象(Abstraction) 18 封装(Encapsulation): 19 多态(Polymorphism) 20 面向对象的优点 22 面向对象的分析、设计和编程 23 面向对象语言的发展简史 26 内容总结 29 独立实践 30 第三章:面向...

    总结Javascript中数组各种去重的方法

    方法一 利用对象属性不重复的特性 Array.prototype.distinct = function (){ var arr = this, i, obj = {}, result = [], len = arr.length; for(i = 0; i< arr.length; i++){ if(!obj[arr

    Javascript基础知识盲点总结之函数

    本文重点给大家介绍js基础知识盲点总结之函数。 一、函数中的arguments对象 每个函数内部都有一个arguments,它能返回函数所接受的所有参数 注意:argumens接收的是实参 如下是利一个利用arguments特性编写的求和...

    javascript语言参考+教程 CHM

    运算符总结; 加法赋值运算符 (+=); 加法运算符 (+); 赋值运算符 (=); 按位“与”赋值运算符 (&=); 按位“与”运算符 (&); 按位左移运算符 (); 按位“非”运算符 (~); 按位“或”赋值运算符 (|=); 按位“或...

    Ext Js权威指南(.zip.001

    Ex4.0共2个压缩包特性,《ext js权威指南》 前 言 第1章 ext js 4开发入门 / 1 1.1 学习ext js必需的基础知识 / 1 1.2 json概述 / 3 1.2.1 认识json / 3 1.2.2 json的结构 / 3 1.2.3 json的例子 / 4 1.2.4 ...

    Javascript执行效率全面总结

    Javascript自身执行效率Javascript中的作用域链、闭包、原型继承、eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下。 1、全局导入我们在编码过程中多多少少会使用到一些...

    javascript DOM 操作基础知识小结

    [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]一、DOM基础1.节点(node)层次Document--最顶层的节点,所有的其他节点都是附属于它的。DocumentType--DTD引用(使用<!DOCTYPE>语法)的对象表现形式,它不能...

    JavaScript ES6常用基础知识总结

    ES6新增了块级作用域,总结一句话大致就是:大括号{}包起来的代码块基本山都可以当做块级作用域。 常见的有 直接使用{}包起来: { var a = 4 } 函数体大括号,if-else大括号,for循环大括号,switch大括号,try...

Global site tag (gtag.js) - Google Analytics