怎样理解base64解码和this

为什么要用getBaseContext()方法代替this
this 常常引用当前的 context。但是有些时候,必须使用getBaseContext()来代替this。就是说使用this会引发错误。
如下面的例子:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView&?&arg0, View arg1, int arg2, long arg3){
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //this line
当我把getBaseContext()变成this就会有错误。
为什么这种情况下必须使用getBaseContext()方法,而不能使用this呢?
按赞数排序
1.getApplicationContext ()方法在应用程序要被摧毁时,返回整个应用程序生命周期的应用上下文。
2.this应用上下文返回activity的当前上下文,属于activity。当它被摧毁时,activity也被摧毁。但是在你的事例中它是指Spinner实例,因为我们在onItemSelected(AdapterView&?&arg0, View arg1, int arg2, long arg3)方法中使用它。这个方法是来自Spinner类,而Spinner从AdapterView.OnItemSelectedListener接口中继承这个方法。
3.getBaseContext()是 ContextWrapper中的方法。
Blockquote
因为这里的this指的不是Activity,而是spinner这个类,nana4ever的回答解释的很全面了
其他相似问题
相关参考资料.net里面this使用
我们现在新建一个TestOfThisBase.cs的类,然后在里面建立一个构造方法TestOfThisBase()
public class TestOfThisBase
&&& public
TestOfThisBase():this("Mr Zhang","Chengdu")
&&&&&&&&&&&
&&& private
&&& private
&&& public
TestOfThisBase(string key, string value)
this.key =
this.value =
说明:当实例化TestOfThisBase类时,就会先执行
TestOfThisBase(string key, string
value)方法,然后再执行TestOfThisBase()方法。
另:若this改为base,则表示调用父类中的构造方法
public class TestOfThisBase:F
&&& public
TestOfThisBase():base("Mr Zhang","Chengdu")
&&&&&&&&&&&
&&& private
&&& private
&&& public
TestOfThisBase(string key, string value)
this.key =
this.value =
public class F
public& F(string key, string value)
&&&&&HttpContext.Current.Response.Write("hello
world 3");
public F()
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。综合来说:&
this相当于自己的指针;base相当于父类的指针;
一般只需要对自己操作就行了。如果是你自己写的类,继承了别的类,就会用到base了。
以下为MSDN上得帮助解释;
base 关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。
从静态方法中使用 base 关键字是错误的。
在本例中,基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法。通过使用base 关键字,可以从派生类中调用基类的Getinfo 方法。
public class Person
protected string ssn = &444-55-6666&;
protected string name = &John L. Malgraine&;
public virtual void GetInfo()
Console.WriteLine(&Name: {0}&, name);
Console.WriteLine(&SSN: {0}&, ssn);
class Employee : Person
public string id = &ABC567EFG&;
public override void GetInfo()
// Calling the base class GetInfo method:
base.GetInfo();
Console.WriteLine(&Employee ID: {0}&, id);
class TestClass
static void Main()
Employee E = new Employee();
E.GetInfo();
本示例显示如何指定在创建派生类实例时调用的基类构造函数。
// keywords_base2.cs
public class BaseClass
public BaseClass()
Console.WriteLine(&in BaseClass()&);
public BaseClass(int i)
Console.WriteLine(&in BaseClass(int i)&);
public int GetNum()
public class DerivedClass : BaseClass
// This constructor will call BaseClass.BaseClass()
public DerivedClass() : base()
// This constructor will call BaseClass.BaseClass(int i)
public DerivedClass(int i) : base(i)
static void Main()
DerivedClass md = new DerivedClass();
DerivedClass md1 = new DerivedClass(1);
Name: John L. Malgraine
SSN: 444-55-6666
Employee ID: ABC567EFG
有关其他示例,请参见 、 和。
in BaseClass()
in BaseClass(int i)
this 关键字引用类的当前实例。
以下是 this 的常用用途:
限定被相似的名称隐藏的成员,例如:
public Employee(string name, string alias)
this.name =
this.alias =
将对象作为参数传递到其他方法,例如:
CalcTax(this);
声明索引器,例如:
public int this [int param]
get { return array[param];
set { array[param] = }
由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。在静态方法中引用 this 是错误的。
在本例中,this 用于限定 Employee 类成员 name 和 alias,它们都被相似的名称隐藏。this 还用于将对象传递到属于其他类的方法CalcTax。
// keywords_this.cs
// this example
class Employee
private decimal salary = 3000.00m;
// Constructor:
public Employee(string name, string alias)
// Use this to qualify the fields, name and alias:
this.name =
this.alias =
// Printing method:
public void printEmployee()
Console.WriteLine(&Name: {0}\nAlias: {1}&, name, alias);
// Passing the object to the CalcTax method by using this:
Console.WriteLine(&Taxes: {0:C}&, Tax.CalcTax(this));
public decimal Salary
public static decimal CalcTax(Employee E)
return 0.08m * E.S
class MainClass
static void Main()
// Create objects:
Employee E1 = new Employee(&John M. Trainer&, &jtrainer&);
// Display results:
E1.printEmployee();
Name: John M. Trainer
Alias: jtrainer
Taxes: $240.00
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:94997次
积分:1596
积分:1596
排名:第11430名
原创:60篇
转载:36篇
评论:24条
(2)(3)(1)(1)(3)(2)(4)(2)(2)(4)(3)(6)(9)(16)(27)(11)JavaScript 中 this 是如何工作的?
控制 this 指向的具体方法有哪些?
按投票排序
this 永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向 window 。例:1var foo = { bar : function(){ console.log(this === foo); } } foo.bar() 输出 true2var foo = { bar : function(){ (function(){ console.log(this); })(); } }foo.bar() 输出 DOMWindow3var foo = { bar : { baz : function(qux){ console.log(this === qux); } } }foobar = foo.foobar.baz(foo.bar) 输出 true但是??wtf = foo.bar.wtf(foo.bar) 输出 false为什么?因为 wtf 不是在一个对象中被调用的,this 指向 DOMWindow 。验证:console.log(this) 输出 DOMWindowwtf(this) 输出 true没明白你说的控制 this 指向是什么意思,this 所指的东西是语言机制的一部分,你控制不了。如果你是问怎么在函数里保留一份其运行时所在对象的 reference,可以用闭包(closure):var foo = {
whoami : "duh i am foo",
bar : function(){
var shit =
return function(){
console.log(shit.whoami);
console.log(this);
}};baz = foo.bar();此时 baz 是一个脱离 foo.bar 而存在的函数,但是:baz() 会输出 duh i am foo 和 DOMWindow 。
这句话还得敲一遍:when a function of an object was called, the object will be passed into the execution context as this value.理解这句话,this基本没问题了。
默认this是本对象的意思。但是javascript里面的function有两个特殊方法call和apply,他们地一个变量,就是function内部的this,javascript里面的叫法是上下文。这个在写函数可加强内联度。
this 是个入口参数。然后方法调用作为语法糖让你可以省略几个字。
函数中的this的值取决于函数调用的模式:方法调用模式当函数被保存为对象的一个属性时,成该函数为该对象的方法。函数中this的值为该对象。var foo = {
name: 'fooname',
getName: function (){
return this.name
foo.getName();
// this =& foo
函数调用模式当函数并不是对象的属性。函数中this的值为全局对象note:某个方法中的内部函数中的this的值也是全局对象,而非外部函数的thisfunction foo(){
this.name = 'fooname';
// this =& window
构造器调用模式即使用new调用的函数,则其中this将会被绑定到那个新构造的对象。function Foo(){
this.name = 'fooname';
var foo = new Foo();
// this =& foo
使用apply或call调用模式该模式调用时,函数中this被绑定到apply或call方法调用时接受的第一个参数。function getName(name){
this.name =
var foo = {};
getName.call(foo, name);
// this =&foo
——————————————————————————改变this的值主要方法(目前想到的,欢迎评论添加):apply或call方法调用时强制修改,使this指向第一个参数。使用Function.bind方法创造新的函数,该新函数的中this指向所提供的第一个参数。
1.如果是call,apply,with,指定的this是谁,就是谁
2.普通的函数调用,函数被谁调用,this就是谁
具体例子看楼上
我的理解是:谁调用的,this就是谁。object.function(),this就是 .前面这个object
写个答案,看看自己是否掌握没 ^_Q没写例子,大家自己测试一下吧,或者参考前面的答案,验证验证~
————————————————————————————————————————ECMA 262 3rd: 需要注意的是,this的值在执行代码之前已经确认好了。也就是说,在进入variable context(执行环境)的时候创建的。a. this指向哪里取决于reference type的值。reference type的值取决于2样东西:identifier(标志符)。如函数名,变量名等。访问属性的时候。也就是说,在调用符号即`()`的左边,假如是identifier或者属性访问的时候,reference type的值就是他们所在的对象,即this指向他们所在的对象。如果不是的话,reference type的值就是null, 这时候this会指向global(全局对象)。
————————————————————————————————————————b. 那么,为什么reference type的值会取决于上面提到的2样东西呢?首先是identifier。在标志符查询机制过程中,若在作用域中查询到想要的标志符,就会返回一个base对象,base的值就是标志符所在的变量对象。本质上,base的值就是reference的值。然后是属性访问。在new一个对象的算法中,一开始就将this值设置为新创建的对象。可以这样理解,当访问一个对象的属性或者方法的时候,this就是他们的对象。
(这里我之前纠结了很久,套用标志符查询机制的话,我又不懂对象的处理机制 = =)
————————————————————————————————————————c. 特殊情况:当标志符的对象是AO(activation object)时,reference type的值是null,所以this指向global。例如函数嵌套的时候。这就可以解释为什么很多情况下this的值为global。
JavaScript 只有函数能提供作用域,this 表达了这个作用域的上下文。这个上下文是一个对象,默认是 global 对象:function foo() {
// 在终端输出 this 对象
console.log(this)
foo() // 输出: global 对象 在浏览器中即 window 对象
但是也可以在函数被运行的时候动态指定(call,apply, bind):var bar = { name: 'bar' }
foo.call(bar) // 输出: { name: 'bar' }
存在一个特殊的情形,就是使用 new 关键字调用一个构造函数的时候。这会为这个函数自动创建一个设置在原型末端的上下文对象。new foo() // 输出: {} 在构造函数内部创建一个对象
当创建一个函数的时候,this其实也被创建了,它指向操作当前函数的那个对象。上面很多同学都说了很多,我补充一点关于在嵌套的函数中的this,自己的理解,有错误的地方,还希望能指正。
看代码:var myObject = {
func1:function() {
console.log(this); //logs myObject
varfunc2=function() {
console.log(this); //logs window
varfunc3=function() {
console.log(this); //logs window
运行上面的代码,你会发现,在嵌套函数里面,最外面的函数this指向的是myObject, 里面的函数,不管嵌套了多少个,它始终指向的都是最大window对象,而不是定义这个函数的对象。(ECMA 3)还有一种情况,(看代码),当你将闭包当作参数传递给foo.func1,当闭包在foo.func1内被调用的时候,闭包函数内的this指向的也是window.var foo = {
func1:function(bar){
bar(); //logs window, not foo
console.log(this);// foo object
foo.func1(function(){console.log(this)});
this 表示的是当前调用的函数或方法的所有者。对于一个全局函数而言,他表示的就是window对象,对于一个对象的方法来讲,他表示的就是该对象实例,在一个时间句柄中,他表示的就是接收到该事件的元素。《javaScript学习指南》p138【C#】关键字this和base比较_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者贡献于
评价文档:
7页免费18页免费10页免费2页¥2.0053页免费6页免费38页免费9页免费4页免费
喜欢此文档的还喜欢7页免费18页免费43页5下载券4页免费52页免费
【C#】关键字this和base比较|C​#
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:6.05KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 mybase 的文章

 

随机推荐