忽然间茫然之javascript函数和对象

问题描述

大家不要笑话我 前天晚上睡觉时候忽然想到这个问题 javascript对象是由函数构造的 可是我感觉貌似用函数就够了 使用对象就是为了多个继承吗 我发现自己很多时候用函数就够了 到底什么时候是必须用函数的呢 唉 脑子很乱 这样写也不知道大家看的懂我的意思不··· 问题补充:谢谢大家啦 看着大家都回复感觉无比幸福 继续研究研究 不急结贴 呵呵

解决方案

引用蔡老师说:“至于Object与Function的区别,感觉最大的还是在于原型”我的理解是Object和Function的原型都是挂接在Function.prototype上,挂在同一原型上没有区别。对象和函数才是有区别的!var obj = new Object();//对象obj的原型是挂在Object.prototype上var fn = new Function("参数","//code");fn的原型是挂在Function.prototype上应该是:fn 和obj有区别因为原型不同(Object.prototype 与 Function.prototype有区别)话说是Object与Function的区别,其实真正说的是其实例的区别。Object与Function本身是没什么区别的,其两者都既是函数又是对象。Object instanceof Function => trueFunction instanceof Object => true我认为两者的区别在于Object.prototype产生的是{},而Function.prototype产生的是function(){}。所以我赞成你的那句话。其实质还是在于{}与function(){}不同。主要因为{}不是一个Function,所以也没有prototype。通常可以看成一个简单的数据集合。如:{} instanceof Object => true(function(){}) instanceof Object => true{} instanceof Function => false(function(){}) instanceof Function => true由上可以看出,Object实例{}并不是一个Function。因为Function有个很大的特色就是原型链,所以Object实例并没有继承这个特色。var a = {};var b = function(){};var c = new a(); //Errorvar d = new b(); var e = a.prototype; //undefinedvar f = b.prototype; //Object因此,{}与function(){}的区别在于function(){}可以看做一个Function对象,用来生成新的实例,而{}不能。所以上例中var c = new a();会抛出错误。
解决方案二:
引用貌似用右手就可以了,找个老婆就是为了释放右手吗?我发现很多时候使用右手就可以了,到底什么时候是必须用右手的呢哈哈,经典!
解决方案三:
JavaScript中函数(function)也是一种数据类型,跟数字(number)、字符串(string)一样,将一个函数实例化,就会产生一个对象(object)类型,这些都可以通过typeof函数还求的当前变量的数据类型。 function a() {this.property1 = "circleName";this.property2 = 2;function compute (r) {return 3.14*r*r;}this.getArea = function() {return compute(this.property2);};}var myCircle = new a();alert(typeof(myCircle.property1));alert(typeof(myCircle.getArea()));alert(typeof(myCircle));alert(typeof(a));上面代码中四个alert分别显示:number string object function感觉说的还是比较浅显易懂的。我们可以把JavaScript中函数理解成java中的类,虽然JavaScript不是面向对象的语言,我们也不经常使用它的基于对象的特性,但是JavaScript中的函数还是和java中的类有许多相似之处的,比如都有成员属性(类如a函数中的property1),成员方法(例如a函数中的getArea)。只是我们在实际编程中函数式编程习惯用的多一些,像这种基于对象的编程用的比较少,让我们忽略它的基于对象特性,其实JavaScript稍加改造,也是可以实现面向对象中继承之类的操作的,这些就超出了几天的讨论范围了。
解决方案四:
读大学的时候,我感觉JS是最难的,等明白了,其实也那样的。熟悉了就好
解决方案五:
我的理解是在JS中函数和对象的区别很微弱, 为什么用函数来构建对象, 其原因主要在于:1. 用函数构建的对象, 可以使用new来创建, 因此我们更习惯接受这种方式创建对象.var a = {}, b = function(){};var c = new a();//errorvar d = new b();2. 用函数构建的对象, 可以实现私有和公有方法, 这与我们平时认识到的对象特性相符.var clazz = function(){ var privateMethod = function(){alert('This is a private method');}; this.publicMethod = function(){alert('This is a public method')}; this.invokPrivateMethod = function(){privateMethod();};};var instance = new clazz();instance.publicMethod();//alert'This is a private method'instance.invokPrivateMethod();//alert'This is a public method'instance.privateMethod();//error3. 通过对Function的pototype进行改造, 可以加入构造函数, 通过反射实现的继承, 与我们平时理解的继承特性几乎一致.由于涉及代码较多, 这里没有举例, 如果有兴趣可以参考ExtJs的实现. 在ExtJs中, 继承, 也就是扩展时(Extend), 将方法写在构造函数中(Constructor), 全都是公有的, 如果只是写在继承或者扩展里(Extend), 则仅在此对象内部有效, 即全为私有.4. 另外通过函数可以实现闭包, 也可以实现代理, 使用{}对象中不行.因此, 如果仅仅是承载数据, 类似于json的话, 直接使用{}对象, 不然都使用function吧, 优点多多.
解决方案六:

解决方案七:
其实是不同方法的不同表现
解决方案八:
对象是由属性构成的 不是函数 函数方法只是作用在这些属性上以上的话和语言无关 另外 js不是面向对象的 是基于对象
解决方案:
深奥,需要睡觉的时候,人静的时候思考。何时该用对象,何时该用函数。。如果,可以替换,可能还是对js不够了解。
解决方案:
面向对象的思想
解决方案:
可能你明白面向对象跟面向过程的区别,就会发现他的好处
解决方案:
上面写错一句话,应改为:1、对象往往是一些属性与方法(函数)的集合体,二者没有可比性。
解决方案:
你的问题:1、“但是 对象应该是比函数强大的啊 可惜我没体会到~~”答案是:对象并不比函数强大!2、“感谢好像是的 我很喜欢我学的第一个语言 C ”面向对象设计与语言没有关系,有差异的是面向对象设计的语言与面向过程设计的语言。一句话,就是语言的不同。以上的原因解释:1、对象往往是一些属性与方法(函数的集合体),二者没有可比性。2、你注意没有,你常常会看到这样的词语“面向对象设计”,“面向过程设计”,这两个词语真正的共同点,或说其想表达的中心在于“设计”!而“面向对象”和“面向过程”,只是其实现“设计”的方法的不同。既然其目的是“设计”,那你用什么语言来设计,都是可以的。因此,很多人如果没有建立起面向对象设计的思想,那他即使使用面向对象设计的语言去设计系统,他也只是使用面向过程式的思想去设计系统。那么同样的,一个人如果有很强的面向对象设计的思想,那他完全可以用过程式的语言,甚至用汇编语言,同时用面向对象的思想去设计他的系统。但要阐述清楚面向对象与面向过程的思想,不是这几句话区分得了的。等元旦放假的时候,写篇文章把我的理解写一下。你再看一下吧。
解决方案:
ECMAScript5标准中的bind方法确实可以让你不再用函数构造对象。比如> var a = function(x,y){return this.base*(x+y)}> var b = a.bind({base: 3})> b(1,2)9
解决方案:
不要忘记:万物皆对象。那么函数本身也就是对象。函数对象区别于普通对象的唯一差距就是函数式对象可以执行。
解决方案:
看了你的疑惑后,我认为,你不明白的是为什么要使用对象,而不是JavaScript实现对象的方法。也就是说,你的思想里还没有面向对象设计的思想,而是在用面向过程设计的的思维。这与那种程序语言无关。要真正解决你的疑惑,你觉得你要学习一些面向对象设计方面的书,去理解面向对象的思想,而不是看其如何实现面向对象的。
解决方案:
引用关键是这个Function instanceof Object => true先判断Function._proto_ == Object.prototype 发现不匹配于是Function._proto_ == Object.prototype._proto_ //ture; 你说反了Function instanceof Object的依据不是Function._proto_ == Object.prototype._proto_而是Function.prototype._proto_ == Object._proto_
解决方案:
Object instanceof Function => trueFunction instanceof Object => true 这个写法曾经困扰我很久instanceof 是如何判断的呢?假设 obj = new fn;那么 obj instanceof fn //ture;最初我一直认为instanceof是这样判断的obj.constructor ===fn 所以true后来我发现是这样的!找到obj的内置原型,用它和构造函数的原型进行比较(obj._proto_==fn.prototype)如果发现不匹配 就在原型中找上一级原型(fn.prototype._proto_)如果还找不到 就继续找上一级原型(fn.prototype._proto_._proto_)原理说了,接下来再看Object instanceof Function => true //这个很好理解Object = new Function("","");//Object是由Function构造出来的Object._proto_ === Function.prototype //ture 关键是这个Function instanceof Object => true 先判断Function._proto_ == Object.prototype 发现不匹配于是Function._proto_ == Object.prototype._proto_ //ture;不知道我有没有表达清楚>_<
解决方案:
哇塞,居然有蔡老师的留言^_^,增加了我学js的动力
解决方案:
我的理解:1.函数只包含操作,比如要做什么处理,可以写个函数。2.对象是包含数据的,比如json数据,就是对象的形式。应该是两个不同的东西吧,如果要把数据以函数的形式写,那估计也别扭。
解决方案:
我的理解:1.javascript本身是个函数式语言,所以只写函数也ok。2.javascript也有对象,不说具体,举个例子window本身就是对象。3.所有的javascript变量可以声明为var xx = zz。这样的形式,可以不放在函数里面,那么它本质上是被定义到了window.xx作为全局属性。所以本质上还是对象。4.比较重要的一点是,javascript可以采用对象形式。那么你会不会选择用呢? 如果你只是界面的简单的显示逻辑,那用它不会有什么好处的。那假如你写过几千行或者上万行的js来表达一个很富有逻辑的代码段。你会使用函数,你要用多少个函数,多少个全局变量来保存多少种信息,你觉得你写出的那成千上百的函数和变量,最后你自己还清楚吗。 用辩证法角度来看,什么都有好有坏,择其优而用。
解决方案:
首先,从概念上理解吧....对象--->有属性有执行体(函数);函数--->可以理解为一个单一的执行过程;javaScript 个人认为语法相当的灵活.虽然可以通过函数去构造对象,但是完全使用函数有其局限性;比如说:你去描述一个人的时候var person = {};person.age = 20;person.sex = "f";person.fire = function(/***/){};........然后你就可以直接调用.....如果你用函数的话也完全可以实现,但是麻烦的很多吧???
解决方案:
把这个认真的看完就明白了:http://www.iteye.com/topic/155109
解决方案:
看你封装的程度了,方法级别的就函数级别就够了,当你想封装组件级别的面向对象更能体现整体。
解决方案:
javaeye为什么时常不能正常访问呢?到底是为什么?谁能告诉我啊?
解决方案:
面向对象而不是过程~
解决方案:
这个时期,一般都有过,很多人由于工作原因(用不到),没有继续走下去。希望楼主可以继续深入的研究下去。建议你读一下《悟透JavaScript》。可以提高你的JavaScript的段位。这篇文章读完以后,就是要实践了,在你接触的系统中,如何巧妙的运用JavaScript是就需要你一点点的积累和总结了。希望楼组精益求精。
解决方案:
当程序的复杂度是你倍感苦恼,当你想追求简单时,就可以考虑使用对象了。
解决方案:
蔡老师说:“至于Object与Function的区别,感觉最大的还是在于原型”我的理解是Object和Function的原型都是挂接在Function.prototype上,挂在同一原型上没有区别。对象和函数才是有区别的!var obj = new Object();//对象obj的原型是挂在Object.prototype上var fn = new Function("参数","//code");fn的原型是挂在Function.prototype上应该是:fn 和obj有区别因为原型不同(Object.prototype 与 Function.prototype有区别)
解决方案:
感觉直接写函数的话,相对于对象少了些对象特有的属性,二用new来声明就可以使用这些属性,还有上面说到的原型,在js里也很重要。
解决方案:
javascript对象是由函数构造的还有一句话是:javascript的函数也是由函数构造的var Object = new Function("","[native]code");//这个是构造过程另外补充一点:由Function构造函数构造出来的对象可以用new关键字继续创建对象所以上面创建的对象其实就是:function Object(){ //[native]code}然后我们new Object就创建出了对象。最后说下个人理解:javascript对象和函数 都是由 Function函数构造出来的。
解决方案:
函数主要是完成一些功能,声明一个对象传递参数更方便。声明对象的方法可以区别同名函数。
解决方案:
如果你仅仅是指function(){}的定义方法。那么使用Object定义方式也行的,基本上没区别,不用钻牛角尖。至于Object与Function的区别,感觉最大的还是在于原型
解决方案:
貌似用右手就可以了,找个老婆就是为了释放右手吗?我发现很多时候使用右手就可以了,到底什么时候是必须用右手的呢
解决方案:
略懂略懂~

时间: 2024-09-19 23:53:14

忽然间茫然之javascript函数和对象的相关文章

javascript用函数实现对象的方法_javascript技巧

本文实例讲述了javascript用函数实现对象的方法.分享给大家供大家参考.具体实现方法如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>利用函数实现对象(重要)</title&g

详解JavaScript函数对象_javascript技巧

函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. function One(leve , leve){ //code return leve+leve } 注释: 形参不需要加上类型: return语句为可选,没有return语句的函数返回undefined: 局部变量与全局变量 在函数内声明:局部变量 在函数外声明:全局变量 向一个新变量名赋值时并没有使用var:这个变量会变为新的全局变量 函数可以作为值 形式1: function init(){ alert("One&qu

盘点JavaScript函数的基本知识

本文旨在提供web开发人员必须了解的所有JavaScript函数的基本知识. 函数于软件开发者而言并不是什么奇幻世界.如果你的日常活动涉及到编码,哪怕是一点点,那么在一天结束的时候,你一定创建/修改了一个或多个函数. 简而言之函数只不过是一组执行某个操作的语句.函数可能会有一些输入参数(在函数体中使用),并在执行后返回值. JavaScript函数也具有这些特性,但它们不仅仅是常规函数.JavaScript函数是对象.你可以查看我曾经写的关于JavaScript对象的文章,里面我提到几乎Java

详解JavaScript的闭包、IIFE、apply、函数与对象_javascript技巧

目录 一.闭包(Closure) 1.1.闭包相关的问题 1.2.理解闭包 二.对象 2.1.对象常量(字面量) 2.2.取值 2.3.枚举(遍历) 2.4.更新与添加 2.5.对象的原型 2.6.删除 2.7.封装 三.函数 3.1.参数对象 (arguments) 3.2.构造函数 3.3.函数调用 3.3.1.call 3.3.2.apply 3.3.3.caller 3.3.4.Callee 3.5.立即执行函数表达式 (IIFE) 3.5.1.匿名函数与匿名对象 3.5.2.函数与函数

JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象

一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div,for循环绑定事件. 示例代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>闭包</title> <style type="

JavaScript中的对象、函数和继承

1. Javascript中的对象.JavaScript可以说是一个基于对象的编程语言,为什么说是基于对象而不是面向对象,因为JavaScript自身只实现了封装,而没有实现继承和多态.既然他是基于对象的,那么我们就来说说js中的对象. 1. Javascript中的对象 JavaScript可以说是一个基于对象的编程语言,为什么说是基于对象而不是面向对象,因为JavaScript自身只实现了封装,而没有实现继承和多态.既然他是基于对象的,那么我们就来说说js中的对象.有人说js中所有的都是对象

javascript的原型和作用域(2) 函数和对象的关系

上文(理解javascript原型和作用域系列(1)--一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; console.log(fn instanceof Object);  // true 对!函数是一种对象,但是函数却不像数组一样--你可以说数组是对象的一种,因为数组就像是对象的一个子集一样.但是函数与对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻

javascript用函数实现对象的方法

  本文实例讲述了javascript用函数实现对象的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;

javascript设计模式之对象工厂函数与构造函数详解_基础知识

下面通过文字详解加代码分析的方式给大家分享下javascript设计模式之对象工厂函数与构造函数的相关知识. 概述使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法.然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象.1).使用工厂函数创建对象我们可以编写一个函数,此函数的功能就是创建对象,可将其. 概述 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法. 然而,除了这两种常用的对象创建方式,JavaScript还提