JavaScript语法问题,求解?报错-问答-阿里云开发者社区-阿里云

开发者社区> 爱吃鱼的程序员> 正文

JavaScript语法问题,求解?报错

2020-06-20 16:47:29 143 1

为什么下面这样的写法是错的?会报错,而要像Object.prototype.fuck这样写

Object.fuck = function() {
	return 111;
}

而下面这个不会报错

var obj = new Object();
obj.fuck = function() {
	return 111;
}
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-20 16:47:46

    两个都没有错,Class.<function_name>=function(){}这种方式,一般拿来写一些类的静态方法。比如像Java里边的String.format()就可以用String.format=function(str){returnstr}这种方式实现。

    Class.prototype.<function_name>=function(){//whatever}这种方法是扩展对象的方法,这里的function可以访问实例(instance)的this变量。

    要访问这个函数必须new下。用实例来访问

    classInstance.<function_name>=function(){}这种方式是动态附加一个函数在这个实例(instance)上,没有什么实际作用,个人认为。

    一般classInstance.<property>这种方式会用的比较多,动态添加变量的属性。

    --------------

    由于这部分比较侧重于OOP(面向对象)的js写法,所以在这个语境下我用Class来代替Fuction描述。

    回复 @wnow20:能解决问题,解答疑问就好,是不是最佳答案不是重点回复 @mr-zhuo:嗯嗯,是的,不过现在又多了个问题Object.prototype.fn为什么能被静态调用,而PrivateClass.prototype.fn不能静态调用PrivateClass.fn();//error回复 @mr-zhuo:能这样理解么,如下:只有Object.prototype.fn定义的原型变量的函数,任何类都可以静态调用?回复 @wnow20:应该这样理解Object是整个js所有类型的基类,包括它自己在Object.prototype下定义的所有方法和属性,都会被继承varx=1;x.fn();//一样能调用,因为x是Number类型,Number继承了Object.prototype的方法回复 @mr-zhuo:回复 @mr-zhuo:我这里测试可以的,代码具体如下:"usestrict"Object.prototype.fuck=function(){return111;}console.log(Object.fuck()); WhatisObject

    你是想为object定义一个f**k属性,而object你并没有定义。js也不会为你默认去创建一个对象。

    varobject={}; //这里定义一个空的对象

    object.fuck=xxxx //为该对象添加一个属性

    你好像没有说清楚两者的区别。规则就是规则,没有为什么嗯嗯,你说的很对,可是我想知道具体是哪个语法,这样我才能查资料学习。你知道是什么语法么?上面那个在什么浏览器上会报错?没报错啊googlechrome,其它的我没试过,估计是语法

    不懂就别回答,误人子弟。

    前端正因为不懂却还非要插一脚的人太多,搞得别人都不信任这个职位了。

    楼主也不要问这些问题,没什么高手来答的,只会引来搅屎棍。

    这本书不错,http://book.douban.com/subject/10546125/,不打算一辈子不懂,就把它啃完。

    回复 @wnow20:权威指南跟api说明没啥不一样。如果你懂基本语法。果断高级程序设计。。经典书目。。2本都很好,一本叫宝典,一本叫经典回复 @铂金小江:嗯嗯。是的额,哦,谢谢,我刚正在看《JavaScript权威指南》,两本书哪本好呀?回复 @wnow20:都看完,自然会知道哪个好。靠自己。语法肯定是错误的,Object是js里的对象,你这样引用当然不对了回复 @mr-zhuo:是的,没错这个语法应该没错吧

    Object是JavaScript里的一个function,我们一般叫它构造函数。

    typeofObject==="function"//true

    虽然『在JavaScript里一切都是对象』,但是对函数使用『.』操作符将不会产生任何效果。

    functionA(){};A.b=1;//undefinedconsole.log(A);//functionA(){}

    通过new操作符调用构造函数,就能产生一个新的对象。

    functionA(){};vara=newA();//a是一个对象,A是构造函数

    这时再通过『.』操作符给对象a增加属性就和普通的对象操作无异了。

    A.b=1;//成立的,而且也是有效的你说Object是function,那你说的不是矛盾么?

    引用来自“Lightning_Strike”的评论

    两个都没有错,Class.<function_name>=function(){}这种方式,一般拿来写一些类的静态方法。比如像Java里边的String.format()就可以用String.format=function(str){returnstr}这种方式实现。

    Class.prototype.<function_name>=function(){//whatever}这种方法是扩展对象的方法,这里的function可以访问实例(instance)的this变量。

    要访问这个函数必须new下。用实例来访问

    classInstance.<function_name>=function(){}这种方式是动态附加一个函数在这个实例(instance)上,没有什么实际作用,个人认为。

    一般classInstance.<property>这种方式会用的比较多,动态添加变量的属性。

    --------------

    由于这部分比较侧重于OOP(面向对象)的js写法,所以在这个语境下我用Class来代替Fuction描述。

    functionClass(){};Class.prototype.fn=function(){/*code*/}Class.fn();//error直接输这一段代码,不输上面那一段,应该是报错的是的,Class.fn()调用的还是Object.prototype.fn这里定义的函数 Object.prototype.fn=function(){return"thisisObject'sfunction";}functionClass(){}Class.prototype.fnx=function(){return"thisisClass'sfunction";}vartest=newClass();test.fny=function(){return"thisistest'sfunction";};test.fny();//直接运行test.fny方法test.fnx();//先查找test有没有fnx属性,有直接执行,没有就找test的构造函数Class.prototype有没有这个fnx,有就执行Class.prototype.fnx();test.fn();//先查找test有没有fn属性,有直接执行,没有就找test的构造函数Class.prototype有没有fn,还是没有,继续找Object.prototype.fn,然后执行,如果Object.prototype.fn还是没有,报错/*PrivateClass.prototype.fn不能静态调用PrivateClass.fn()因为调用PrivateClass.fn的时候,先判断PrivateClass有没有fn方法,没有就找Object.prototype有没有fn方法如果是varx=newPrivateClass();x.fn就会先看PrivateClass.prototype.fn存不存在所以x.fn();就会不报错*/



    0 0
相关问答

11

回答

在阿里云上安装和运行Node.js全功略

ycwong 2013-09-18 15:17:30 64025浏览量 回答数 11

19

回答

【分享】如何提高网站的打开速度?

enj0y 2012-11-17 14:35:22 56725浏览量 回答数 19

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157084浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 92874浏览量 回答数 28

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146781浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145624浏览量 回答数 31

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85184浏览量 回答数 23

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302601浏览量 回答数 249

13

回答

【云服务器分享】如何节省网站流量

dreamdoo 2012-10-15 10:36:09 80121浏览量 回答数 13

14

回答

对象存储oss【问答合集】

我是管理员 2018-08-03 14:54:02 67369浏览量 回答数 14
+关注
爱吃鱼的程序员
https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
2
文章
21569
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载