本文目錄一覽:
- 1、js支持像java一樣的類繼承嗎
- 2、js 怎麼調用JAVA類的方法?具體代碼?
- 3、在html頁面中如何用js調用java類
- 4、JavaScript中的「面向對象」和Java語言中的「面向對象」有何不同?
- 5、請說明javascript的繼承機制和java繼承機制的區別
- 6、JS 類繼承和原型繼承區別
js支持像java一樣的類繼承嗎
javascript 沒有真實意義上的繼承,js的繼承都是類似繼承。代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.showName=function(){
return this.name;
};
function Worker(name,age){
Person.apply(this,arguments);
}
Worker.prototype = new Person();
js 怎麼調用JAVA類的方法?具體代碼?
用ajax的方法.
首先將要調用的類名和方法名作為參數傳給某個servlet.這一步的方法有許多種,用框架,或者直接用xmlHttpRequest對象.
另外,要調用的類名和類的完整包路徑最好寫在配置文件里
這裡假設類名為Hello,方法名為sayHello,並且sayHello方法不帶參數,類路徑為com.demo.Hello
配置文件AjaxConfig.properties
Hello = com.demo.Hello
於是傳入的參數為 class=Hellomethod=sayHello
在servlet中作如下處理:
String className=request.getParameter(“classname”);
String methodName=request.getParameter(“method”);
String classPath=null;
.
讀取配置文件,取出className所對應的值放入classPath變數中(這一步方法有很多種,怎麼讀配置文件,可以網上找資料,很多的,我就不細寫了)
.
Class c=Class.forName(classPath);//載入你所指定的類
Class param[]=new Class[0];//方法的參數為0個
Method m=null;
String returnValue=null;//返回值
try {
m = c.getMethod(“sayHello”,param);//獲取你所指定的類中的指定方法
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
returnValue=(String)m.invoke(c.newInstance(), new Object[0]);//調用你所指定的方法
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
最後,將returnValue的值返回給客戶端即可
類Hello.java
public class Hello
{
public String sayHello()
{
return “hello”;
}
}
不明白的加67919823,我們一起討論呀
在html頁面中如何用js調用java類
在html頁面中,使用js調用java類要使用ajax,具體方法步驟如下:
1、將要調用的類名和方法名作為參數傳給某個servlet.這一步的方法有許多種,用框架,或者直接用xmlHttpRequest對象;
2、要調用的類名和類的完整包路徑最好寫在配置文件里,這裡假設類名為Hello,方法名為sayHello,並且sayHello方法不帶參數,類路徑為com.demo.Hello。
3、配置文件AjaxConfig.properties
Hello = com.demo.Hello
4、傳入的參數設置為 class=Hellomethod=sayHello
在servlet中作如下處理:
String className=request.getParameter(“classname”);
String methodName=request.getParameter(“method”);
String classPath=null;
5、讀取配置文件,取出className所對應的值放入classPath變數中,
Class c=Class.forName(classPath);//載入你所指定的類
Class param[]=new Class[0];//方法的參數為0個
Method m=null;
String returnValue=null;//返回值
try {
m = c.getMethod(“sayHello”,param);//獲取你所指定的類中的指定方法
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
returnValue=(String)m.invoke(c.newInstance(), new Object[0]);//調用你所指定的方法
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、將returnValue的值返回給客戶端即可
類Hello.java
public class Hello
{
public String sayHello()
{
return “hello”;
}
}
JavaScript中的「面向對象」和Java語言中的「面向對象」有何不同?
面向對象三大特徵:封裝、繼承、多態
基於封裝,引出了js如何創建對象(class、function、原型+閉包創建私有變數等)。這個java和js都差不多
基於繼承,引出了js繼承的一些知識點,如extends、super、重寫重載、abstract(typescript)、interface(typescript)。js主要是基於原型繼承,而java主要是基於extends
多態存在的三個必要條件。重寫(繼承)、重載、向上轉型:其中重寫,js支持。重載js不支持,可以通過額外處理來支持向上轉型,因為js是弱類型語言,不支持數據類型,ts支持(編譯階段)
也就是說對於多態的支持,目前js只支持一種。
總的來說 js的面向對象支持還沒有java語言那麼豐富嚴謹,正是因為這些寬鬆語法,也讓js變得更加有趣。但是面向對象oop的思想是一致的。因為oop思想不是固定語言的特性,而是一種思想。隨著js不斷的更新迭代,相信其語法特性也更加豐富和嚴謹。
後話:js目前的發展趨勢,好像不在跟隨傳統語言的oop,有點往函數式編程的路上轉向
請說明javascript的繼承機制和java繼承機制的區別
一,先來說說javascript的繼承機制的幾種方式:
1,原型鏈繼承:
優點:從instanceof關鍵字來看,實例既是父類的實例,又是子類的實例,看起來似乎是最純粹的繼承。
缺點:子類區別於父類的屬性和方法,必須在Sub.prototype = new Base();這樣的語句之後分別執行,無法被包裝到Sub這個構造器裡面去。例如:Sub.prototype.name = 「sub」;無法實現多重繼承。
2,構造繼承:
優點:可以實現多重繼承,可以把子類特有的屬性設置放在構造器內部。
缺點:使用instanceof發現,對象不是父類的實例。
3,實例繼承:
優點:是父類的對象,並且使用new構造對象和不使用new構造對象,都可以獲得相同的效果。
缺點:生成的對象實質僅僅是父類的實例,並非子類的對象;不支持多繼承。
4,拷貝繼承:
優點:支持多繼承。
缺點:效率較低;無法獲取父類不可枚舉的方法。
二,java繼承機制:
1,java里的類不能多重繼承,如果一個類一旦繼承了它的父類,那麼它就別想再繼承別的類。一個兒子只能有一個老爸,原本設計是沒錯的。可是在實際應用中,就會出現各種問題。
2,java里有更好的介面,介面從本質上來說可以更好的代替繼承。實現像C++里一樣的宏定義的功能,把你想要的東西都抽象在介面里,讓具體的類去實現這些功能。
三,綜上可以看出java不能多繼承,javascript可以,但是javascript沒有介面這一說話,也有局限性,各有千秋吧。
JS 類繼承和原型繼承區別
類式繼承就像java的繼承一樣,思想也比較簡單:在子類型構造函數的內部調用超類型構造函數。
原型式繼承是藉助已有的對象創建新的對象,將子類的原型指向父類,就相當於加入了父類這條原型鏈
而你的 下面這段代碼不是嚴格意義上的類式繼承,按照Nicholas C.Zakas的說法,這個應該叫做組合式繼承。它調用了兩次parent2()。第一次是 child2.prototype=new parent2(‘param’); child2就會得到兩個屬性param,getParam(),他們都是parent2的屬性,但是他們在child2的原型中。第二次是parent2.call(this,cparam); 這次又在新對象上創建了實例屬性param,getParam()。於是,這兩個屬性就屏蔽了原型中的兩個同名屬性。這有什麼好處呢,就是你在構建一個child3時也繼承parent2()的屬性,還可以定義自己的屬性。與此同時他長的就和他兄弟不同了,但又有一樣的「血統(使用父類的方法)」。
純手打,歡迎繼續討論
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204468.html