js 对象中为啥不能直接调用自己的属性方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 对象中为啥不能直接调用自己的属性方法?相关的知识,希望对你有一定的参考价值。

js 对象中为什么不能直接调用自己的属性方法?var obj =
name: "myName",
getName: function()
return name;




console.log(obj .getName())//undefined

对象不是已经实例化了吗,为什么获取不到name??然后this.name就可以??

参考技术A 简单点,对象中的getName方法返回的name是一个变量值,你在函数中没有定义变量name或者没有传一个参数来给name赋值,此时的name变量就只能是undefined,而对象obj中的name是一个对象的属性不是一个变量,当你调用getName方法时,调用对象是obj,方法中的this.name中的this就是指向了这个obj,此时的this.name就是obj的属性name。

Object在其子类中,为啥不能调用clone()???

package test;

public class C extends Object

void test()
Object object = new Object();
object.clone();//The method clone() from the type Object is not visible

Object类对象是无法被clone的,至少当引用obj被声明为Object类的时候,你不能这么做...
因为Java中并不是所有的类都可以被克隆(而且JDK中还描述说不能保证某些类clone的结果x.clone()!=x绝对成立),所以Object类对象无法调用clone()...
还有super不是指Object而是指其父类的引用。
由于clone是object类的一个protected方法,代码中不能直接调用它
子类只能受保护的clone方法克隆他自己,为此必须重新定义clone方法,
并将其设为public,一般情况下,建议实现cloneable标记接口,并通过调用super.clone()方法。
参考技术A protected修饰,只能在该类中或同包类中调用,你这里是在你的C类中!!当然看不见Object类的clone。另外,Object对象好像是不能克隆的,因为Object类的克隆方法只能在Object类或同包类中调用,但你不能在jdk里面乱写 参考技术B 你要用clone()方法,必须将C实现Cloneable标记接口才可以,我觉得你应该这个测试
public class C extends Object implements Cloneable

void test()
C c= new C();
C c2=(Object) c.clone();//The method clone() from the type Object is not visible

参考技术C 因为你的例程不是在java.lang包中,protected类型只能在本包和子类中访问。 参考技术D 可以参考这个问题:
http://stackoverflow.com/questions/1138769/why-is-the-clone-method-protected-in-java-lang-object

以上是关于js 对象中为啥不能直接调用自己的属性方法?的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中,子类继承父类,父类可以调用子类继承父类的方法,父类为啥不能调用子类自己定义的方法呢

为啥“基类对象”不能调用它自己的虚函数? C++

为啥是List list = new ArrayList,而不直接用ArrayList

JAVA中,子类将继承父类的所有属性和方法吗?为啥?

java基础(杂记)

hadoop中利用context.write为啥只需要对象就可以直接获得属性值?